Spring源码学习-后置处理器,Autowired实现原理

目录

      • Autowired实现原理
        • populateBean
        • InstantiationAwareBeanPostProcessor
          • AutowiredAnnotationBeanPostProcessor
      • 后置处理器
        • BeanFactory的后置处理器
          • BeanDefinitionRegistryPostProcessor
          • BeanFactoryPostProcesso
          • ConfigurationClassPostProcessor
        • Bean的后置处理器
          • BeanProcessor
          • InstantiationAwareBeanPostProcessor
          • MergedBeanDefinitionPostProcessor
          • SmartInstantiationAwareBeanPostProcessor
      • Bean生命周期总结图

Autowired实现原理

populateBean

给创建好的bean实例进行普通属性的赋值
Spring源码学习-后置处理器,Autowired实现原理_第1张图片

InstantiationAwareBeanPostProcessor

AutowiredAnnotationBeanPostProcessor

这个就是用来完成Autowired注解能够自动装配的bean后置处理器
这个方法初始化了一个set,用来存放需要解析的自动装配注解,里面就包括Autowired,Value和Inject等,之后Spring拿到这些元数据信息直接反射赋值

private final Set<Class<? extends Annotation>> autowiredAnnotationTypes = new LinkedHashSet<>(4);
public AutowiredAnnotationBeanPostProcessor() {
		this.autowiredAnnotationTypes.add(Autowired.class);
		this.autowiredAnnotationTypes.add(Value.class);
		try {
			this.autowiredAnnotationTypes.add((Class<? extends Annotation>)
					ClassUtils.forName("javax.inject.Inject", AutowiredAnnotationBeanPostProcessor.class.getClassLoader()));
			logger.trace("JSR-330 'javax.inject.Inject' annotation found and supported for autowiring");
		}
		catch (ClassNotFoundException ex) {
			// JSR-330 API not available - simply skip.
		}
	}

后置处理器

BeanFactory的后置处理器

BeanDefinitionRegistryPostProcessor

在容器刷新12步骤中由invokeBeanFactoryPostProcessors方法调用,是bean定义信息注册中心的增强,先去执行实现了PriorityOrdered接口,再去执行实现了Ordered接口的实例对象,最后去执行没有实现顺序接口的bean工厂增强器

BeanFactoryPostProcesso

bean工厂的增强器,执行步骤同BeanDefinitionRegistryPostProcessor一样

ConfigurationClassPostProcessor

配置类的增强处理器,Spring底层通过他继承了BeanDefinitionRegistryPostProcessor实现了bean信息注册中心的增强,把项目中所有的配置类信息解析出来放入信息注册中心,等待后续的Bean创建.使用doProcessConfigurationClass方法解析诸如@Component@ComponentScan等等注解

Bean的后置处理器

由容器刷新12步中的registerBeanPostProcessors方法去专门的注册Bean的后置增强处理器

BeanProcessor
  1. postProcessBeforeInitialization:有机会在对Bean进行填充修改
  2. postProcessAfterInitialization:有机会在对Bean进行填充修改
InstantiationAwareBeanPostProcessor
  1. postProcessAfterInstantiation:bean初始化后进行处理,@Autowired自动装配的赋值可以再次操作,但是他直接返回true,没有做事
  2. postProcessProperties:真正进行自动装配(也可以自己解析自定义的注解进行属性值的注入)
MergedBeanDefinitionPostProcessor

postProcessMergedBeanDefinition:再次修改Bean的定义信息

SmartInstantiationAwareBeanPostProcessor
  1. predictBeanType:在注册监听器registerListeners()步骤触发,是在组件创建之前最后修改组件类型的机会,可以给组件指定任意的类型
  2. determineCandidateConstructors:告诉spring可以用哪些构造器
  3. getEarlyBeanReference:返回早期的Bean引用

对Bean进行代理增强期间进行使用

Bean生命周期总结图

Spring源码学习-后置处理器,Autowired实现原理_第2张图片

你可能感兴趣的:(Spring源码解读,spring,学习,java)