我們遇到了有關Spring @Configurable註解的問題。編譯時編織(AspectJ)和儀器按預期工作時,我的項目中的所有內容都正確設置。Spring @Configurable Spring Singleton bean構造函數
但問題如下。我們正在構建一些巧妙的記錄器,可能會在春季範圍之外初始化。因此,我們決定把它@Configurable
@Configurable
public class Logger(){
@Autowired A a;
}
我們想要使用Spring @Controller,這是定義無狀態(單身),這裏面記錄儀,所以我們有:
@Controller
public class Controller {
Logger l = new Logger();
}
但由於控制器是singleton,那麼Spring會在初始加載時初始化其內容,並且由於記錄器在其構造函數中,因此它在完成上下文本身構造之前被初始化,因此其屬性A永遠不會被初始化。以下相當具有說明性的警告信息被打印出來:
2013.12.16 18:49:39.853 [main] DEBUG o.s.b.f.w.BeanConfigurerSupport -
BeanFactory has not been set on BeanConfigurerSupport:
Make sure this configurer runs in a Spring container.
Unable to configure bean of type [Logger]. Proceeding without injection.
有什麼辦法解決這個問題。
在此先感謝。
您確定這可行嗎?我目前無法驗證它,但在我看來,它與我的代碼存在同樣的問題。 ApplicationContext不會被自動裝配,因爲它現在還沒有準備好(上下文正在初始化,並且在構建Logger之前無法初始化,因爲Logger是Controller單例bean的一部分)。因此AnnotationBeanConfigurerAspect將無法訪問ApplicationContext,並且無法自動裝載它。 – malejpavouk