2011-09-15 69 views
4

我正在使用@Value註釋來獲取屬性&它在Normal方法中成功地發生,但不在Class構造方法中。可以有人告訴可能是什麼原因嗎?@Value Annotation不從屬性文件注入值

Class A { 

    @Value("#{columnProperties['Users.Columns']}") 
    String columnNames; 

    A() 
    { 
     System.out.println("In Constructor="+columnNames); 
    } 

    void show() 
    { 
     System.out.println("In Method="+columnNames); 
    } 

} 

當我這樣做

A obj=new A(); 

我得到的輸出

在構造函數= NULL

obj.show()

在方法= A,B,C

(這意味着期望的結果)

我想值儘快構造是called.I'm獲得編譯錯誤,如果我把所設定的靜態或初始化塊中的字符串聲明。

+0

可能是http://stackoverflow.com/questions/2306078/spring-constructor-injection-of-primitive-values-properties-with-annotation-ba – 2011-09-15 05:43:15

回答

3

當對象未完成構造時(即,對象構造函數仍未被縮放),我們如何才能確定對象的成員是否真的準備好了?在我看來,Spring可能會在構造函數完成之後纔會注入該值。

+0

的副本我非常懷疑您的回答。構造函數注入是可能的。 – Shahzeb

+0

你完全可以用Spring來做_Constructor Injection_,但這不是你上面做的。 Nicholas在提示構造函數將首先執行(並完成)時是正確的,然後Spring將執行注入。如果你想_constructor injection_,你將需要聲明一個輸入參數給構造函數。請參閱[this](http://stackoverflow.com/questions/2306078/spring-constructor-injection-of-primitive-values-properties-with-annotation-ba)。 – AWhitford

+0

是的,正如@AWhitford所建議的,構造函數注入需要傳入一個參數。問題中發生的不是構造函數注入,而是setter注入,這是在創建對象之後發生的,也就是在構造函數完成執行之後發生的。 –

3

nicholas.hauschild是正確的。 @Value將在之後注入對象被構建。如果你想在bean構建完成後進行一些初始化,那麼你應該實現IntializingBean

+1

謝謝!很好的答案,非常有幫助 –

相關問題