spring源码refresh()方法之十一,finishBeanFactoryInitialization()
2020-07-14 18:08:57 0 举报
spring源码解读之refresh()方法的第11步,finishBeanFactoryInitialization()方法的解析过程
作者其他创作
大纲/内容
1、实例化所有剩余的(非延迟初始化)单例。finishBeanFactoryInitialization()
这个方法是AOP的入口,在这里可能产生代理对象
6、创建bean实例createBean()
AbstractAutowireCapableBeanFactory
AbstractApplicationContext.refresh()
AbstractNestablePropertyAccessor.setPropertyValue(PropertyValue pv) 1、PropertyTokenHolder tokens.keys 当array、list、map类型数据时keys数组不为空,里面的元素就是array、list的index,map的key。2、PropertyHandler对象封装了PropertyDescriptor,用jdk反射中的内省机制来获取read、write方法,来读写属性的值
如果注解是@Autowired
3、getBean()
7、给BeanPostProcessors一个返回代理而不是目标bean实例的机会。resolveBeforeInstantiation()
如果注解是@Resource
完成bean的缓存注册工作,把bean注册到map中
1、调用BeanPostProcessor接口的postProcessBeforeInitialization,跟InstantiationAwareBeanPostProcessor区别记忆。在bean实例化和ioc依赖注入完后,对bean的前置初始化工作2、调用InitializingBean接口的afterPropertiesSet()方法,可以完成一些bean的校验,或者初始化工程其他内容的工作,有一定的侵入性3、bean上的init-method属性,反射调用这个属性配置的方法,无依赖性,效率比较低。完成bean的校验,或者工程的初始化工作
AutowiredAnnotationBeanPostProcessor
2、实例化所有剩余的(非延迟初始化)单例preInstantiateSingletons()
AbstractPropertyAccessor
15、setPropertyValues(mpvs)
8、applyBeanPostProcessorsBeforeInstantiation()applyBeanPostProcessorsAfterInitialization()
AbstractBeanFactory
12、CommonAnnotationBeanPostProcessor @Resource注解对依赖注入的支持
4、BeanFactory接口的实现doGetBean()
CommonAnnotationBeanPostProcessor
InstantiationAwareBeanPostProcessor接口 postProcessBeforeInstantiation产生代理beanInstantiationAwareBeanPostProcessor接口 postProcessAfterInitialization对bean进行后置修改
DefaultListableBeanFactory
5、mbd.isSingleton()单例
0 条评论
下一页