spring bean创建过程
2022-08-02 15:27:22 1 举报
1
作者其他创作
大纲/内容
把实现了ApplicationListener接口的监听器注册到事件多播器上
UserService.class
@Bean
BeanPostProcessor#postProcessBeforeInitialization
三级缓存单例工厂函数接口对象,解析依赖时用到此扩展,比如依赖注入的是aop代理对象,AnnotationAwareAspectJAutoProxyCreator就会调用getEarlyBeanReference生成代理对象注入到beanSmartInstantiationAwareBeanPostProcessor.getEarlyBeanReference
注册bean后置处理器
bean创建的生命周期
BeanPostProcessor处理bean
ApplicationContext context = new AnnotationConfigApplicationContext(MainStat.class);
解析@Autowired注解,进行依赖注入AutowiredAnnotationBeanPostProcessor
缓存的field和method在这里解析为bean
容器初始化阶段
创建beanFactory: this.beanFactory = new DefaultListableBeanFactory();
在设置属性前,可以修改bean状态:InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
@ComponentScans、@ComponentScan
解析@Resource、@PostConstruct等注解CommonAnnotationBeanPostProcessor
缓存AutowiredFieldElement和AutowiredMethodElement
初始化前(@PostConstruct)
扫描@Aspect类,创建Advisors
@Import
调用@PostConstruct标记的方法
AbstractAutowireCapableBeanFactory#createBeanInstance
创建aop代理
ApplicationListenerDetector
配置类解析
无参构造方法
EventListenerMethodProcessor
初始化后(生成aop代理对象)
属性依赖注入
最终生成bean对象:userService
非常重要的BeanDefinitionPostProcessorConfigurationClassPostProcessor
BeanNameAware#setBeanName/BeanClassLoaderAware#setBeanClassLoader/BeanFactoryAware#setBeanFactory
初始化(InitializingBean)
进行一些初始化动作InitializingBean#afterPropertiesSet
@ImportResource
bean中属性、方法之上的注解预解析,缓存为beanName为key的mapMergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition
ApplicationContextAwareProcessor
初始化之后的动作BeanPostProcessor#postProcessAfterInitialization
bean工厂的初始化,向容器添加一些BeanPostProcessor:prepareBeanFactory(beanFactory);
registerBeanPostProcessors(beanFactory); aop的AnnotationAwareAspectJAutoProxyCreator在这一步实例化出来放到spring容器。在spring创建下一个bean时开始发挥作用,扫描
无属性纯净对象
实例化前扩展,可以自定义BeanPostProcessor生成代理对象返回InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
创建bean定义的读取器beanDefinitionReader【会注册相关的BeanDefinitionPostProcessor和BeanFactoryPostProcessor】 this.reader = new AnnotatedBeanDefinitionReader(this);
依赖解析,属性注入的处理InstantiationAwareBeanPostProcessor#postProcessProperties
收藏
0 条评论
下一页