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:校验配置文件。