最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring之IOC底層原理詳解

 更新時間:2023年01月09日 14:24:48   作者:楠慧  
這篇文章主要介紹了Spring之IOC底層原理,內(nèi)容詳細(xì),文章簡單易懂,具有一定的參考價值,需要的朋友可以參考下

IoC底層核心原理

IoC核心接口

組件掃描器

  • 開發(fā)過程中,需要根據(jù)需求加載必要的bean,排除指定bean

設(shè)定組件掃描加載過濾器

  • 名稱:@ComponentScan
  • 類型:類注解
  • 位置:類定義上方
  • 作用:設(shè)置spring配置加載類掃描規(guī)則
  • 范例:
@ComponentScan(
    value="com.itheima",	           //設(shè)置基礎(chǔ)掃描路徑
    excludeFilters =                          //設(shè)置過濾規(guī)則,當(dāng)前為排除過濾
	@ComponentScan.Filter(            //設(shè)置過濾器
	    type= FilterType.ANNOTATION,  //設(shè)置過濾方式為按照注解進(jìn)行過濾
	    classes=Repository.class)     //設(shè)置具體的過濾項,過濾所有@Repository修飾的bean
    )

? includeFilters:設(shè)置包含性過濾器

? excludeFilters:設(shè)置排除性過濾器

? type:設(shè)置過濾器類型

自定義組件過濾器

  • 名稱:TypeFilter
  • 類型:接口
  • 作用:自定義類型過濾器
  • 范例:
public class MyTypeFilter implements TypeFilter {
    public boolean match(MetadataReader mr, MetadataReaderFactory mrf) throws IOException {
        ClassMetadata cm = metadataReader.getClassMetadata();
        tring className = cm.getClassName();
        if(className.equals("com.NanMu.dao.impl.BookDaoImpl")){
            return false;
        }
        return false;
    }
}

組件掃描加載過濾器

  • 過濾策略
  1. ANNOTATION 注記
  2. ASSIGNABLE_TYPE 可分配類型
  3. ASPECTJ
  4. REGEX
  5. CUSTOM
  • 應(yīng)用場景
  1. 數(shù)據(jù)層接口測試環(huán)境
  2. 業(yè)務(wù)層接口測試環(huán)境
  3. 各種運(yùn)行環(huán)境設(shè)置

自定義導(dǎo)入器

  • bean只有通過配置才可以進(jìn)入spring容器,被spring加載并控制
  • 配置bean的方式如下:
  1. XML文件中使用標(biāo)簽配置
  2. 使用@Component及衍生注解配置
  • 企業(yè)開發(fā)過程中,通常需要配置大量的bean,需要一種快速高效配置大量bean的方式

ImportSelector

  • 名稱: ImportSelector
  • 類型:接口
  • 作用:自定義bean導(dǎo)入器
  • 范例:
public class MyImportSelector implements ImportSelector {
    public String[] selectImports(AnnotationMetadata icm) {
        return new String[]{"com.itheima.dao.impl.AccountDaoImpl"};
    }
}
@Configuration
@ComponentScan("com.itheima")
@Import(MyImportSelector.class)
public class SpringConfig {
}

不寫衍生注解就可以配置一個導(dǎo)入器類用于對象中

自定義注冊器

  • 名稱:ImportBeanDefinitionRegistrar
  • 類型:接口
  • 作用:自定義bean定義注冊器
  • 范例:
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    public void registerBeanDefinitions(AnnotationMetadata icm, BeanDefinitionRegistry r) {
        ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(r, false);
        TypeFilter tf = new TypeFilter() {
            public boolean match(MetadataReader mr, MetadataReaderFactory mrf) throws IOException {
                return true;
            }
        };
        scanner.addIncludeFilter(tf);//包含
        //scanner.addExcludeFilter(tf);
        scanner.scan("com.itheima");
    }
}
@Configuration
@ComponentScan("com.itheima")
//4.自定義注冊器
//@Import(MyImportBeanDefinitionRegistrar.class)

public class SpringConfig {
}

bean初始化過程解析

bean初始化過程解析

  • BeanFactoryPostProcessor
  1. 作用:定義了在bean工廠對象創(chuàng)建后,bean對象創(chuàng)建前執(zhí)行的動作,用于對工廠進(jìn)行創(chuàng)建后業(yè)務(wù)處理
  2. 運(yùn)行時機(jī):當(dāng)前操作用于對工廠進(jìn)行處理,僅運(yùn)行一次
  • BeanPostProcessor
  1. 作用:定義了所有bean初始化前后進(jìn)行的統(tǒng)一動作,用于對bean進(jìn)行創(chuàng)建前業(yè)務(wù)處理與創(chuàng)建后業(yè)務(wù)處理
  2. 運(yùn)行時機(jī):當(dāng)前操作伴隨著每個bean的創(chuàng)建過程,每次創(chuàng)建bean均運(yùn)行該操作
  • InitializingBean
  1. 作用:定義了每個bean的初始化前進(jìn)行的動作,屬于非統(tǒng)一性動作,用于對bean進(jìn)行創(chuàng)建前業(yè)務(wù)處理
  2. 運(yùn)行時機(jī):當(dāng)前操作伴隨著任意一個bean的創(chuàng)建過程,保障其個性化業(yè)務(wù)處理
  • 注意:上述操作均需要被spring容器加載放可運(yùn)行

bean初始化過程解析

繁瑣的bean初始化過程處理

  • FactoryBean
  1. 對單一的bean的初始化過程進(jìn)行封裝,達(dá)到簡化配置的目的

FactoryBean與BeanFactory區(qū)別

  • FactoryBean:封裝單個bean的創(chuàng)建過程
  • BeanFactory:Spring容器頂層接口,定義了bean相關(guān)的獲取操作

以上就是Spring之IOC底層原理的詳細(xì)內(nèi)容,更多關(guān)于Spring之IOC底層的資料請關(guān)注腳本之家其它相關(guān)文章,請大家多多支持我們腳本之家!

相關(guān)文章

  • 實例解讀Ajax與servlet交互的方法

    實例解讀Ajax與servlet交互的方法

    這篇文章主要介紹了Ajax與servlet交互的方法,需要的朋友可以參考下
    2014-07-07
  • windows 32位eclipse遠(yuǎn)程hadoop開發(fā)環(huán)境搭建

    windows 32位eclipse遠(yuǎn)程hadoop開發(fā)環(huán)境搭建

    這篇文章主要介紹了windows 32位eclipse遠(yuǎn)程hadoop開發(fā)環(huán)境搭建的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • mybatis使用pagehelper插件過程詳解

    mybatis使用pagehelper插件過程詳解

    這篇文章主要介紹了mybatis使用pagehelper插件過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Spring Boot2.X國際化文件編寫配置

    Spring Boot2.X國際化文件編寫配置

    這篇文章主要介紹了Spring Boot2.X國際化文件編寫配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Maven安裝和配置阿里云鏡像(解決加載慢)

    Maven安裝和配置阿里云鏡像(解決加載慢)

    本文介紹了Maven中配置阿里云鏡像以解決依賴加載慢的問題,包括安裝Maven、配置環(huán)境變量、在IDEA中配置Maven等內(nèi)容,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Java的CGLIB動態(tài)代理深入解析

    Java的CGLIB動態(tài)代理深入解析

    這篇文章主要介紹了Java的CGLIB動態(tài)代理深入解析,CGLIB是強(qiáng)大的、高性能的代碼生成庫,被廣泛應(yīng)用于AOP框架,它底層使用ASM來操作字節(jié)碼生成新的類,為對象引入間接級別,以控制對象的訪問,需要的朋友可以參考下
    2023-11-11
  • SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊實現(xiàn)方法解析

    SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊實現(xiàn)方法解析

    這篇文章主要介紹了SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Spark SQL關(guān)于性能調(diào)優(yōu)選項詳解

    Spark SQL關(guān)于性能調(diào)優(yōu)選項詳解

    這篇文章將為大家詳細(xì)講解有關(guān)Spark SQL性能調(diào)優(yōu)選項,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲
    2023-02-02
  • Spring開發(fā)核心之AOP的實現(xiàn)與切入點持久化

    Spring開發(fā)核心之AOP的實現(xiàn)與切入點持久化

    面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用“類”和 “對象”來實現(xiàn),所以,面向?qū)ο缶幊唐鋵嵕褪菍?nbsp;“類”和“對象” 的使用,面向切面編程,簡單的說,就是動態(tài)地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程
    2022-10-10
  • mybatis?plus?MetaObjectHandler?不生效的解決

    mybatis?plus?MetaObjectHandler?不生效的解決

    今天使用mybatis-plus自動為更新和插入操作插入更新時間和插入時間,配置了MetaObjectHandler不生效,本文就來解決一下,具有一定的 參考價值,感興趣的可以了解一下
    2023-10-10

最新評論

株洲市| 安义县| 茂名市| 万源市| 竹山县| 安庆市| 长治市| 灵丘县| 凤冈县| 望奎县| 石渠县| 洞头县| 晋州市| 唐河县| 科技| 夏津县| 汉阴县| 抚州市| 松潘县| 五峰| 全椒县| 贵阳市| 手游| 吉林市| 垦利县| 玛纳斯县| 定西市| 南皮县| 安图县| 嵊泗县| 景德镇市| 新乡县| 紫金县| 遵义县| 大理市| 兴安盟| 清徐县| 玉田县| 环江| 镶黄旗| 五峰|