spring
- ##组件注册
###使用@Configuration @Bean给容器中注册组件
使用xml配置文件进行注入:
eg:Person类:
1.使用xml文件的bean标签向容器中注入一个bean组件:
- 获得ioc容器和其中的Person组件:
使用配置类和注解进行注入
1.建立配置类(等同于配置文件)加上@Configuration注解。
2.使用@Bean注解给容器中注入一个bean组件。
3.获取ioc容器中的组件。
###@ComponentScan自动扫描组件
使用xml配置文件进行包扫描:
使用配置类进行包扫描:
获取IOC中的组件:
扩展: 可以只扫描一些包和只不扫一些包(以下根据类型注解类型扫包)。
不扫某包 excludeFilters:
只扫某包 includeFilters:
@Filter:过滤条件。
使用自定义规则实现TypeFilter
执行流程
核心方法refresh()
- prepareRefresh():做容器刷新前的准备工作,比如设置容器的启动时间,活跃状态。准备监听器等。
- obtainFreshBeanFactory():创建容器对象:DefaultListableBeanFactory,将xml配置文件加载到当前工厂中,获得BeanDefinition
- prepareBeanFactory(beanFactory):给上一步容器对象生成时未赋值得属性赋值.
- postProcessBeanFactory(beanFactory); BFPP接口里得方法,这里用于扩展
- invokeBeanFactoryPostProcessors(beanFactory); 执行BFPP后置处理器。
调用refresh()之前:
setConfigLocations:校验配置文件。