Spring之IOC底层原理详解
作者:楠慧
这篇文章主要介绍了Spring之IOC底层原理,内容详细,文章简单易懂,具有一定的参考价值,需要的朋友可以参考下
IoC底层核心原理
IoC核心接口

组件扫描器
- 开发过程中,需要根据需求加载必要的bean,排除指定bean
 

设定组件扫描加载过滤器
- 名称:@ComponentScan
 - 类型:类注解
 - 位置:类定义上方
 - 作用:设置spring配置加载类扫描规则
 - 范例:
 
@ComponentScan(
    value="com.itheima",	           //设置基础扫描路径
    excludeFilters =                          //设置过滤规则,当前为排除过滤
	@ComponentScan.Filter(            //设置过滤器
	    type= FilterType.ANNOTATION,  //设置过滤方式为按照注解进行过滤
	    classes=Repository.class)     //设置具体的过滤项,过滤所有@Repository修饰的bean
    )
 includeFilters:设置包含性过滤器
 excludeFilters:设置排除性过滤器
 type:设置过滤器类型
自定义组件过滤器
- 名称: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
 
- 应用场景
 
- 数据层接口测试环境
 - 业务层接口测试环境
 - 各种运行环境设置
 
自定义导入器
- bean只有通过配置才可以进入spring容器,被spring加载并控制
 - 配置bean的方式如下:
 
- XML文件中使用标签配置
 - 使用@Component及衍生注解配置
 
- 企业开发过程中,通常需要配置大量的bean,需要一种快速高效配置大量bean的方式
 
ImportSelector
- 名称: ImportSelector
 - 类型:接口
 - 作用:自定义bean导入器
 - 范例:
 
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 {
}不写衍生注解就可以配置一个导入器类用于对象中
自定义注册器
- 名称: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工厂对象创建后,bean对象创建前执行的动作,用于对工厂进行创建后业务处理
 - 运行时机:当前操作用于对工厂进行处理,仅运行一次
 
- BeanPostProcessor
 
- 作用:定义了所有bean初始化前后进行的统一动作,用于对bean进行创建前业务处理与创建后业务处理
 - 运行时机:当前操作伴随着每个bean的创建过程,每次创建bean均运行该操作
 
- InitializingBean
 
- 作用:定义了每个bean的初始化前进行的动作,属于非统一性动作,用于对bean进行创建前业务处理
 - 运行时机:当前操作伴随着任意一个bean的创建过程,保障其个性化业务处理
 
- 注意:上述操作均需要被spring容器加载放可运行
 
bean初始化过程解析
繁琐的bean初始化过程处理
- FactoryBean
 
- 对单一的bean的初始化过程进行封装,达到简化配置的目的
 
FactoryBean与BeanFactory区别
- FactoryBean:封装单个bean的创建过程
 - BeanFactory:Spring容器顶层接口,定义了bean相关的获取操作
 
以上就是Spring之IOC底层原理的详细内容,更多关于Spring之IOC底层的资料请关注脚本之家其它相关文章,请大家多多支持我们脚本之家!
