spring之DefaultListableBeanFactory的bean的创建过程
程序员文章站
2022-03-12 22:12:28
...
一、DefaultListableBeanFactory简介
DefaultListableBeanFactory是bean加载的核心部分,是Spring注册及加载的默认实现。继承关系如下图:
AbstractAutowireCapableBeanFactory完成Bean的创建,属性的注入,切面代理的产生,bean的生命周期的管理。
二、AbstractAutowireCapableBeanFactory源码分析
doCreateBean方法完成了bean的创建和初始化。
Spring容器中默认注册了多个后置处理器。实现InstantiationAwareBeanPostProcessor接口的类,在bean实例化前后和初始化前后会调用相应的实现方法。
1.createBeanInstance():通过反射实现实例化bean。
2.addSingletonFactory():如果是单例,加入到单例池中。
3.populateBean():注入属性对象
3.1 遍历BeanPostProcessor列表,回调postProcessAfterInstantiation()方法。
3.2 遍历BeanPostProcessor列表,回调postProcessPropertyValues()方法。
CommonAnnotationBeanPostProcessor:注入@Resource注释的对象。
AutowiredAnnotationBeanPostProcessor:注入@Autowired注释的对象。
RequiredAnnotationBeanPostProcessor校验@Required注释的方法是否调用。
4. initializeBean():初始化bean。
4.1 遍历BeanPostProcessor列表,回调postProcessBeforeInitialization()方法。
ApplicationContextAwareProcessor:回调实现了EnvironmentAware,EmbeddedValueResolverAware,ResourceLoaderAware,ApplicationEventPublisherAware,ApplicationContextAware等接口的方法,注入对应的Environment,StringValueResolver,ResourceLoader,ApplicationEventPublisher,ApplicationContext对象。
ServletContextAwareProcessor:回调实现了ServletContextAware,ServletConfigAware等接口的方法,注入对应的ServletContext,ServletConfig对象。
4.2 如果实现InitializingBean接口就回调bean的afterPropertiesSet()方法。
4.3 如果bean配置了initMethod属性,执行initMethod指定的方法。
4.4 遍历BeanPostProcessor列表,回调postProcessAfterInitialization()方法。
ApplicationListenerDetector:注册ApplicationListener。
DefaultListableBeanFactory是bean加载的核心部分,是Spring注册及加载的默认实现。继承关系如下图:
AbstractAutowireCapableBeanFactory完成Bean的创建,属性的注入,切面代理的产生,bean的生命周期的管理。
二、AbstractAutowireCapableBeanFactory源码分析
doCreateBean方法完成了bean的创建和初始化。
Spring容器中默认注册了多个后置处理器。实现InstantiationAwareBeanPostProcessor接口的类,在bean实例化前后和初始化前后会调用相应的实现方法。
1.createBeanInstance():通过反射实现实例化bean。
2.addSingletonFactory():如果是单例,加入到单例池中。
3.populateBean():注入属性对象
3.1 遍历BeanPostProcessor列表,回调postProcessAfterInstantiation()方法。
3.2 遍历BeanPostProcessor列表,回调postProcessPropertyValues()方法。
CommonAnnotationBeanPostProcessor:注入@Resource注释的对象。
AutowiredAnnotationBeanPostProcessor:注入@Autowired注释的对象。
RequiredAnnotationBeanPostProcessor校验@Required注释的方法是否调用。
4. initializeBean():初始化bean。
4.1 遍历BeanPostProcessor列表,回调postProcessBeforeInitialization()方法。
ApplicationContextAwareProcessor:回调实现了EnvironmentAware,EmbeddedValueResolverAware,ResourceLoaderAware,ApplicationEventPublisherAware,ApplicationContextAware等接口的方法,注入对应的Environment,StringValueResolver,ResourceLoader,ApplicationEventPublisher,ApplicationContext对象。
ServletContextAwareProcessor:回调实现了ServletContextAware,ServletConfigAware等接口的方法,注入对应的ServletContext,ServletConfig对象。
4.2 如果实现InitializingBean接口就回调bean的afterPropertiesSet()方法。
4.3 如果bean配置了initMethod属性,执行initMethod指定的方法。
4.4 遍历BeanPostProcessor列表,回调postProcessAfterInitialization()方法。
ApplicationListenerDetector:注册ApplicationListener。
上一篇: ORA-14400: 插入的分区关键字未映射到任何分区
下一篇: 莲子是坚果类吗