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.
この問題から抜け出す方法はありますか。
前もって感謝します。