2

Spring @Configurableアノテーションに関する興味深い問題に遭遇しました。プロジェクト内のすべてがコンパイル時ウィービング ( AspectJ )用に適切にセットアップされており、インストルメンテーションは期待どおりに機能します。

しかし、問題は続きます。Spring スコープ外で初期化される可能性のある、いくつかの賢いロガーを構築しています。そのため、 @Configurable にすることにしました

@Configurable
public class Logger(){
   @Autowired A a;
}

この Logger を Spring @Controller 内で使用したいので、これは定義上ステートレス (シングルトン) であるため、次のようになります。

@Controller
public class Controller {
   Logger l = new Logger();
}

ただし、コントローラーはシングルトンであるため、スプリングは初期ロード時にその内容を初期化し、ロガーはそのコンストラクターにあるため、コンテキスト自体の構築が完了する前に初期化されるため、そのプロパティ 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. 

この問題から抜け出す方法はありますか。

前もって感謝します。

4

1 に答える 1