我一直在想:在使用@Value
注释时,Spring注入属性的确切方式是什么?检查字段是否具有注释的机制是什么?它是使用反射和一些类来查找所有带注释的类并创建它们注入属性的实例,还是以其他方式执行?我知道注释处理只会在编译过程中使用,不会改变代码,所以这里幕后发生的事情真的......?
提前致谢!
答案 0 :(得分:2)
@Value
注释类型具有@Retention(value=RUNTIME)
注释,这意味着信息在运行时可用(即使用反射)。
BeanPostProcessor
,特别是AutowiredAnnotationBeanPostProcessor
可以在实例化后检查bean的字段,方法或构造函数是否存在此注释。
答案 1 :(得分:1)
如果启用了annotation-config功能,那么每次Spring实例化bean时,它会遍历所有字段和方法,并检查它们是否使用反射注释了Spring支持的注释之一。