2013-06-26 118 views
1

我一直在想:在使用@Value注释时,Spring究竟如何注入属性?这背后的机制是什么,检查一个字段是否有注释?它是使用反射和一些类来找到所有带注释的类并创建它们的一个实例来注入属性,还是以其他方式做它?我知道注释处理只会在编译过程中使用,并且不会更改代码,所以这里幕后发生的事情真的......?Spring在使用@Value进行注释时如何注入属性?

在此先感谢!

回答

2

@Value注释类型具有@Retention(value=RUNTIME)注释,这意味着该信息在运行时可用(即使用反射)。

BeanPostProcessor,特别是AutowiredAnnotationBeanPostProcessor可以检查该注解的上字段,方法或实例化之后的豆的构造的存在。

+0

所以,如果我得到这个权利,这只会工作,如果一个bean是自动装配或定义在上下文中? BeanPostProcessor将使用反射来创建该类的实例,并为相应的字段设置值...?所以,这全是反思,没有别的,对吧? – carlspring

+0

Bean由另一个类创建,BeanPostProcessor(顾名思义)仅用于在实例化后修改Bean。但是除此之外确实不需要其他的魔法:) – herman

+0

事实上,它必须是一个Spring bean(或者用XML定义或者通过注释)。它不必自动装配,AutowiredAnnotationBeanPostProcessor处理@ Autowired/@ Inject以及@Value注释。 – herman

1

如果注释配置功能处于打开状态,那么每次Spring实例化一个bean时,它都会遍历所有的字段和方法,并检查它们是否使用反射来注释Spring支持的注释。

相关问题