5

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 を正しくフェッチできなくなるのではないかと心配しています。

4

1 に答える 1