spring 受管理bean初始化流程

1.初始化流程--

红色标注的是spring相关的后处理器,在bean实例化过程的不一样时机调用相关的后处理接口spring

bean初始化大概分为5步:缓存

   --------执行InstantiationAwareBeanPostProcessor-postProcessBeforeInstantiation(Class<?> beanClass, String beanName)
1.执行构造方法
   --------执行MergedBeanDefinitionPostProcessor-postProcessMergedBeanDefinition(RootBeanDefinition mbd, Class<?> beanType, String beanName)
   --------执行InstantiationAwareBeanPostProcessor-postProcessAfterInstantiation(Object bean, String beanName)
   --------执行InstantiationAwareBeanPostProcessor-postProcessPropertyValues
2.执行set 方法(或者是属性注解)
3.执行生命周期Aware接口方法,注入须要的对象
  ---------执行BeanPostProcessor-postProcessBeforeInitialization(Object bean, String beanName)
4.执行afterPropertiesSet
5.执行自定义的init-method方法
  ---------执行BeanPostProcessor-postProcessAfterInitialization(Object bean, String beanName)post

2.spring的后处理回调接口

1.InstantiationAwareBeanPostProcessor--postProcessBeforeInstantiation实例化以前(构造方法执行以前)调用spa

做用:传入要实例化的对象的class,能够替换(偷梁换柱)成其余的class,好比一个代理的class代理

2.MergedBeanDefinitionPostProcessor--postProcessMergedBeanDefinition 构造方法调用以后执行对象

做用:合并class定义接口

使用场景:spring用来缓存属性注解信息,好比缓存属性注解信息@Autoware @Resouce 等,实现类 AutowiredAnnotationBeanPostProcessor生命周期

3.InstantiationAwareBeanPostProcessor-postProcessPropertyValues 设置属性值时调用it

做用:对属性信息进行一些处理io

使用场景:spring在第二个后处理时缓存了属性注解信息,这里就经过缓存取出注解信息,而后将对应的属性注入进去.实现类AutowiredAnnotationBeanPostProcessor

 

4.BeanPostProcessor--postProcessAfterInitialization对象已经实例化完(包括构造方法,属性注入,初始方法等)

做用:对象实例完成之后的后处理

场景:spring aop自动代理,用的就是postProcessAfterInitialization后处理 实现类AnnotationAwareAspectJAutoProxyCreator,经过这个回调,将实例化的对象产生一个代理对象返回

相关文章
相关标签/搜索