Java8/Spring Boot 2 アプリケーションを使用しています。リクエスト スコープの Bean をシングルトン Bean に注入したいと考えています。公式ドキュメントでは、プロキシまたは ObjectFactory/Providerのいずれかを使用して、シングルトン Bean で実行時に正しいスコープの Bean を常に取得する必要があることが強調されています。ただし、 @RequestScope アノテーションは、この質問への回答で説明されているように、ある種のプロキシを「自動的に」設定するようです。
次の 3 つの実装が実際には同一であり、どちらが優先されるのか疑問に思っています。
アプローチ 1: objectFactory<> を明示的に使用する
@Component
@RequestScope
public class MyRequestScopedBean{...}
@Component
public class MySingletonBean{
@Autowired
private ObjectFactory<MyRequestScopedBean> myRequestScopedBean
}
アプローチ 2: リクエストスコープ Bean が自動的にプロキシされると仮定して、通常どおり注入しますか?
@Component
@RequestScope
public class MyRequestScopedBean{...}
@Component
public class MySingletonBean{
@Autowired
private MyRequestScopedBean myRequestScopedBean
}
アプローチ 3: @Configuration と @Bean を使用します。違いがわからず、動作が異なるのではないかと心配しているからです。
@Comfiguration
public class myBeanConfig{
@Bean
@RequestScope
public MyRequestScopedBean getRequestScopedBean(){return new MyRequestScopedBean();}
}
@Component
public class MySingletonBean{
@Autowired
private MyRequestScopedBean myRequestScopedBean
}
簡潔でスコープ/プロキシを自動的に処理するため、アプローチ 2 をお勧めします。
@Autowired Bean がfinal
フィールドとして宣言されている場合、答えは変わりますか? 最終的に作成すると、プロキシが要求ごとに新しい Bean を正しくフェッチできなくなるのではないかと心配しています。