欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring之IOC底層原理詳解

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

IoC底層核心原理

IoC核心接口

組件掃描器

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

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

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

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

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

? type:設(shè)置過(guò)濾器類(lèi)型

自定義組件過(guò)濾器

  • 名稱(chēng):TypeFilter
  • 類(lèi)型:接口
  • 作用:自定義類(lèi)型過(guò)濾器
  • 范例:
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;
    }
}

組件掃描加載過(guò)濾器

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

自定義導(dǎo)入器

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

ImportSelector

  • 名稱(chēng): ImportSelector
  • 類(lèi)型:接口
  • 作用:自定義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 {
}

不寫(xiě)衍生注解就可以配置一個(gè)導(dǎo)入器類(lèi)用于對(duì)象中

自定義注冊(cè)器

  • 名稱(chēng):ImportBeanDefinitionRegistrar
  • 類(lèi)型:接口
  • 作用:自定義bean定義注冊(cè)器
  • 范例:
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.自定義注冊(cè)器
//@Import(MyImportBeanDefinitionRegistrar.class)

public class SpringConfig {
}

bean初始化過(guò)程解析

bean初始化過(guò)程解析

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

bean初始化過(guò)程解析

繁瑣的bean初始化過(guò)程處理

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

FactoryBean與BeanFactory區(qū)別

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

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

相關(guān)文章

  • Gradle的SpringBoot項(xiàng)目構(gòu)建圖解

    Gradle的SpringBoot項(xiàng)目構(gòu)建圖解

    這篇文章主要介紹了Gradle的SpringBoot項(xiàng)目構(gòu)建圖解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 如何利用java中String類(lèi)的substring()字符串截取最后一個(gè)字符

    如何利用java中String類(lèi)的substring()字符串截取最后一個(gè)字符

    Java中的String是不可變的類(lèi)型,因此substring()方法并不會(huì)改變?cè)址?而是返回了一個(gè)新的字符串,這篇文章主要介紹了如何利用java中String類(lèi)的substring()字符串截取最后一個(gè)字符,需要的朋友可以參考下
    2023-11-11
  • Java使用反射操作數(shù)組示例

    Java使用反射操作數(shù)組示例

    這篇文章主要介紹了Java使用反射操作數(shù)組,結(jié)合實(shí)例形式分析了基于java反射機(jī)制操作數(shù)組的創(chuàng)建、賦值、輸出等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07
  • 詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x

    詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x

    這篇文章主要為大家介紹了詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java Apollo是如何實(shí)現(xiàn)配置更新的

    Java Apollo是如何實(shí)現(xiàn)配置更新的

    這篇文章主要介紹了Java Apollo是如何實(shí)現(xiàn)配置更新的,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • JAVA對(duì)象中使用?static?和?String?基礎(chǔ)探究

    JAVA對(duì)象中使用?static?和?String?基礎(chǔ)探究

    這篇文章主要介紹了JAVA對(duì)象中使用static和String基礎(chǔ)探究,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式實(shí)現(xiàn)步驟

    SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式實(shí)現(xiàn)步驟

    這篇文章主要介紹了SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • SpringBoot項(xiàng)目設(shè)置斷點(diǎn)debug調(diào)試無(wú)效忽略web.xml問(wèn)題的解決

    SpringBoot項(xiàng)目設(shè)置斷點(diǎn)debug調(diào)試無(wú)效忽略web.xml問(wèn)題的解決

    這篇文章主要介紹了SpringBoot項(xiàng)目設(shè)置斷點(diǎn)debug調(diào)試無(wú)效忽略web.xml問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Java如何利用遞歸計(jì)算出階乘

    Java如何利用遞歸計(jì)算出階乘

    這篇文章主要介紹了Java如何通過(guò)遞歸計(jì)算出階乘,文中介紹了遞歸的使用方法和基本特點(diǎn),以及相關(guān)示例代碼,對(duì)大家的學(xué)習(xí)有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • Java如何向Word模板中插入Base64圖片和數(shù)據(jù)信息

    Java如何向Word模板中插入Base64圖片和數(shù)據(jù)信息

    這篇文章主要介紹了Java如何向Word模板中插入Base64圖片和數(shù)據(jù)信息問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評(píng)論