Spring之IOC底層原理詳解
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è)置具體的過濾項(xiàng),過濾所有@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;
}
}組件掃描加載過濾器
- 過濾策略
- ANNOTATION 注記
- ASSIGNABLE_TYPE 可分配類型
- ASPECTJ
- REGEX
- CUSTOM
- 應(yīng)用場景
- 數(shù)據(jù)層接口測試環(huán)境
- 業(yè)務(wù)層接口測試環(huán)境
- 各種運(yùn)行環(huán)境設(shè)置
自定義導(dǎo)入器
- bean只有通過配置才可以進(jìn)入spring容器,被spring加載并控制
- 配置bean的方式如下:
- XML文件中使用標(biāo)簽配置
- 使用@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 {
}不寫衍生注解就可以配置一個(gè)導(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
- 作用:定義了在bean工廠對象創(chuàng)建后,bean對象創(chuàng)建前執(zhí)行的動(dòng)作,用于對工廠進(jìn)行創(chuàng)建后業(yè)務(wù)處理
- 運(yùn)行時(shí)機(jī):當(dāng)前操作用于對工廠進(jìn)行處理,僅運(yùn)行一次
- BeanPostProcessor
- 作用:定義了所有bean初始化前后進(jìn)行的統(tǒng)一動(dòng)作,用于對bean進(jìn)行創(chuàng)建前業(yè)務(wù)處理與創(chuàng)建后業(yè)務(wù)處理
- 運(yùn)行時(shí)機(jī):當(dāng)前操作伴隨著每個(gè)bean的創(chuàng)建過程,每次創(chuàng)建bean均運(yùn)行該操作
- InitializingBean
- 作用:定義了每個(gè)bean的初始化前進(jìn)行的動(dòng)作,屬于非統(tǒng)一性動(dòng)作,用于對bean進(jìn)行創(chuàng)建前業(yè)務(wù)處理
- 運(yùn)行時(shí)機(jī):當(dāng)前操作伴隨著任意一個(gè)bean的創(chuàng)建過程,保障其個(gè)性化業(yè)務(wù)處理
- 注意:上述操作均需要被spring容器加載放可運(yùn)行
bean初始化過程解析
繁瑣的bean初始化過程處理
- FactoryBean
- 對單一的bean的初始化過程進(jìn)行封裝,達(dá)到簡化配置的目的
FactoryBean與BeanFactory區(qū)別
- FactoryBean:封裝單個(gè)bean的創(chuàng)建過程
- BeanFactory:Spring容器頂層接口,定義了bean相關(guān)的獲取操作
以上就是Spring之IOC底層原理的詳細(xì)內(nèi)容,更多關(guān)于Spring之IOC底層的資料請關(guān)注腳本之家其它相關(guān)文章,請大家多多支持我們腳本之家!
相關(guān)文章
windows 32位eclipse遠(yuǎn)程hadoop開發(fā)環(huán)境搭建
這篇文章主要介紹了windows 32位eclipse遠(yuǎn)程hadoop開發(fā)環(huán)境搭建的相關(guān)資料,需要的朋友可以參考下2016-07-07
SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊實(shí)現(xiàn)方法解析
這篇文章主要介紹了SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Spark SQL關(guān)于性能調(diào)優(yōu)選項(xiàng)詳解
這篇文章將為大家詳細(xì)講解有關(guān)Spark SQL性能調(diào)優(yōu)選項(xiàng),小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲2023-02-02
Spring開發(fā)核心之AOP的實(shí)現(xiàn)與切入點(diǎn)持久化
面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用“類”和 “對象”來實(shí)現(xiàn),所以,面向?qū)ο缶幊唐鋵?shí)就是對 “類”和“對象” 的使用,面向切面編程,簡單的說,就是動(dòng)態(tài)地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程2022-10-10
mybatis?plus?MetaObjectHandler?不生效的解決
今天使用mybatis-plus自動(dòng)為更新和插入操作插入更新時(shí)間和插入時(shí)間,配置了MetaObjectHandler不生效,本文就來解決一下,具有一定的 參考價(jià)值,感興趣的可以了解一下2023-10-10

