在@Value 注入属性值(下)中发现
@Value注解注释的属性是在InstantiationAwareBeanPostProcessor的postProcessPropertyValues方法注入到bean中的。
但是当时并没有发现是在哪一个实现了postProcessPropertyValues接口的类中对@value注解进行了注入。
今天通过学习@Autowire注解的注入时机,有了新的发现
1public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter implements MergedBeanDefinitionPostProcessor, PriorityOrdered, BeanFactoryAware {
2 private final Set<Class<? extends Annotation>> autowiredAnnotationTypes = new LinkedHashSet();
3
4 public AutowiredAnnotationBeanPostProcessor() {
5 this.autowiredAnnotationTypes.add(Autowired.class);
6 this.autowiredAnnotationTypes.add(Value.class);
7
8 try {
9 this.autowiredAnnotationTypes.add(ClassUtils.forName("javax.inject.Inject", AutowiredAnnotationBeanPostProcessor.class.getClassLoader()));
10 this.logger.info("JSR-330 \'javax.inject.Inject\' annotation found and supported for autowiring");
11 } catch (ClassNotFoundException var2) {
12 ;
13 }
14
15 }
16}
AutowiredAnnotationBeanPostProcessor是InstantiationAwareBeanPostProcessor 的一个实现类。
autowiredAnnotationTypes 是AutowiredAnnotationBeanPostProcessor类所能处理的注解。
而正好在AutowiredAnnotationBeanPostProcessor类的构造函数中添加了两个注解类
Autowired.class
Value.class
所以可以看出@Autowired和@Value注解都是通过AutowiredAnnotationBeanPostProcessor实现注入的。