本文介紹了將順序指定為Spring@Autwire的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我使用的是Spring框架4。
我有一個類(比如ClassA),其中使用了另一個類(比如ClassB)。ClassA的成員變量正在從ClassB獲取值。ClassB有一個從屬性文件讀取數(shù)據(jù)的靜態(tài)方法。在ClassB中,使用@Autowired
注釋注入靜態(tài)成員變量ApplicationContext
。
我想要的是,我想確保當ClassA使用其成員變量時,它應該使用從屬性文件讀取的值進行所有設置。而對于該類,B應將ApplicationContext
全部設置為從MessageSource
讀取。
當ClassA標記為@Component
時,Spring加載ClassA,但當它嘗試初始化成員變量時,它得到NullPointerException
,因為ApplicationContext
尚未初始化。
所以我的問題是,有沒有什么方法可以讓Spring告訴某個Bean應該按某種順序或類似的順序進行初始化。我嘗試使用@DependsOn
注釋,并將@Bean
指定為ApplicationContext
的getter方法。但它給出了以下例外:
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'applicationContext': Requested bean is currently in creation: Is there an unresolvable circular reference?
對這個問題有什么想法嗎?
謝謝
推薦答案
感謝您的評論。
我在Spring框架提供的一個批注中找到了解決方案。
@DependsOn
批注的解決方案起作用。實際上,當我使用ApplicationContext
的@Bean上述getter方法時,它觸發(fā)了問題中提到的異常。然后,我閱讀了@DependsOn
的documentation注釋。它聲明該注釋適用于@Bean和@Component。作為ApplicationContext
被注入的類,我已經使ClassA@DependsOn
成為@Component
被注入的類,并且它起作用了。
再次感謝您的評論。
這篇關于將順序指定為Spring@Autwire的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,