2013-06-26 135 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支持的註釋。

相關問題