摘要:對類的實例化,不是開發(fā)者自己通過的方式來實例化,而是通過框架自身來實例化,這過程稱為。一般地,我們也將控制反轉(zhuǎn)稱為,依賴注入。繼續(xù)遍歷這些成員變量,在循環(huán)中判斷當(dāng)前成員變量是否帶有注解,若帶有該注解,則從中根據(jù)類取出實例。
對類的實例化,不是開發(fā)者自己通過new的方式來實例化,而是通過框架自身來實例化,這過程稱為IoC??刂撇皇怯砷_發(fā)者來決定的,而是反轉(zhuǎn)給框架了。一般地,我們也將控制反轉(zhuǎn)稱為DI(Dependency Injection,依賴注入)。那如何實現(xiàn)呢?
最簡單的方式是,先通過BeanHelper獲取所有Bean Map(是一個Map
分別取出Bean類與Bean實例 ,進而通過反射獲取類中所有的成員變量。繼續(xù)遍歷這些成員變量,在循環(huán)中判斷當(dāng)前成員變量是否帶有Inject注解,若帶有該注解,則從Bean Map中根據(jù)Bean類取出Bean實例。最后通過ReflectionUtil#setField方法來修改當(dāng)前成員變量的值。
核心實現(xiàn):
Map, Object> beanMap = BeanHelper.getBeanMap(); if (CollectionUtil.isNotEmpty(beanMap)) { for (Map.Entry , Object> beanEntry : beanMap.entrySet()) { Class> beanClass = beanEntry.getKey(); Object beanInstance = beanEntry.getValue(); Field[] beanFields = beanClass.getDeclaredFields(); if (ArrayUtil.isNotEmpty(beanFields)) { for (Field beanField : beanFields) { if (beanField.isAnnotationPresent(Inject.class)) { Class> beanFieldClass = beanField.getType(); Object beanFieldInstance = beanMap.get(beanFieldClass); if (beanFieldInstance != null) { ReflectionUtil.setField(beanInstance, beanField, beanFieldInstance); } } } } } }
更多架構(gòu)底層實現(xiàn)代碼請移步
https://github.com/edagarli/own_framework
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/65409.html
摘要:入門和學(xué)習(xí)筆記概述框架的核心有兩個容器作為超級大工廠,負(fù)責(zé)管理創(chuàng)建所有的對象,這些對象被稱為。中的一些術(shù)語切面切面組織多個,放在切面中定義。 Spring入門IOC和AOP學(xué)習(xí)筆記 概述 Spring框架的核心有兩個: Spring容器作為超級大工廠,負(fù)責(zé)管理、創(chuàng)建所有的Java對象,這些Java對象被稱為Bean。 Spring容器管理容器中Bean之間的依賴關(guān)系,使用一種叫做依賴...
摘要:楊充一定時間內(nèi)該點擊事件只能執(zhí)行一次用來修飾這是一個什么類型的注解。楊充自定義編譯器獲取遍歷,并生成代碼配置文件文件配置的作用是向系統(tǒng)注冊自定義注解處理器,執(zhí)行編譯時使用進行處理。 目錄介紹 01.創(chuàng)建項目步驟 1.1 項目搭建 1.2 項目功能 02.自定義注解 03.創(chuàng)建Processor 04.compiler配置文件 05.編譯jar 06.如何使用 07.編譯生成代...
摘要:關(guān)于依賴注入注入的注解提供的注解不僅僅是對象,還有在構(gòu)造器上,還能用在屬性的方法上。與之相反,的限定符能夠在所有可選的上進行縮小范圍的操作,最終能夠達到只有一個滿足所規(guī)定的限制條件。注解是使用限定符的主要方式。 本文首發(fā)于泊浮目的專欄:https://segmentfault.com/blog... Spring致力于提供一種方法管理你的業(yè)務(wù)對象。在大量Java EE的應(yīng)用中,隨處可...
摘要:構(gòu)造函數(shù)注入通過調(diào)用類的構(gòu)造函數(shù),將接口實現(xiàn)類通過構(gòu)造函數(shù)變量傳入。而在中,其使用橫切技術(shù),將這類代碼從原屬的封裝對象中提取出來,封裝到一個可重用模塊中,稱為。 最近實習(xí)用到Spring的開發(fā)框架,但是之前沒有接觸過,因此希望利用網(wǎng)上的資源來學(xué)習(xí)以下。 Spring官方給出了非常全面的介紹,非常適合我這種完全的小白……在這一系列學(xué)習(xí)中,我閱讀的主要資源是5.1.2 Reference ...
摘要:希望大家看完這篇文章能對小程序性能優(yōu)化有一定的認(rèn)識,如果有錯誤或不嚴(yán)謹(jǐn)?shù)牡胤?,歡迎批評指正,如果喜歡,歡迎點贊收藏。 小程序從發(fā)布到現(xiàn)在也已經(jīng)有將近兩年的時間,越來越來多的公司開始重視小程序生態(tài)帶來的流量,今年也由于小程序平臺對外能力的越來越多的開放以及小程序平臺的自身優(yōu)化,越來越多的開發(fā)者也自主的投入到小程序的開發(fā)當(dāng)中,現(xiàn)在,作為前端如果會寫小程序,絕對是一個不折不扣的面試加分項。相...
閱讀 1961·2023-04-26 02:14
閱讀 3862·2021-11-23 09:51
閱讀 1473·2021-10-13 09:39
閱讀 4056·2021-09-24 10:36
閱讀 3077·2021-09-22 15:55
閱讀 3598·2019-08-30 12:57
閱讀 2098·2019-08-29 15:30
閱讀 2053·2019-08-29 13:19