一、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。
spring之DefaultListableBeanFactory的bean的创建过程
猜你喜欢
转载自ncs123.iteye.com/blog/2404314
今日推荐
周排行