@Value 注入屬性值(下)
之前試驗過@Value是在<init>對象實例化後,在注入屬性(即調用類的set方法實現屬性的初始化)前其作用的。
具體是如何起作用以及是什麼時候其作用的。
下圖是spring中一個bean的生命週期:
<init>對象實例化即時途中的“實例化”那一步。
注入屬性即時圖中的“設置屬性值”。
那麼@Value的作用時間可能在第三步或事第四步
public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {
Object postProcessBeforeInstantiation(Class<?> var1, String var2) throws BeansException;
boolean postProcessAfterInstantiation(Object var1, String var2) throws BeansException;
PropertyValues postProcessPropertyValues(PropertyValues var1, PropertyDescriptor[] var2, Object var3, String var4) throws BeansException;
}
InstantiationAwareBeanPostProcessor是BeanPostProcessor的子接口
postProcessPropertyValues方法可以掃描帶有註解的字段和方法,並注入到Bean中
所以通過@Value註解註釋的屬性 就是在第四步中通過InstantiationAwareBeanPostProcessor的postProcessPropertyValues方法注入到bean中的。