1

クラスがあります

public class Test {

   @Autowired
   private Testing abc;

   public Testing getTesting() {
     return abc;
   }

}

@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class Testing {

   private int i;
}

autowire 対応の Bean ファクトリを使用してクラス Test を手動で作成するたびに、Testing のインスタンスが作成されることを期待しています。

しかし、今日、私は javax.inject.Provider の新しい概念を紹介されました

public class Test {

   @Autowired
   private Provider<Testing> abc;

   public Testing getTesting() {
     return abc.get();
   }
}



@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class Testing {

   private int i;

   //transactional methods
}

どのようなメリットがありますか?

4

1 に答える 1

2
  • 複数のインスタンスを取得しています。
  • インスタンスの遅延またはオプションの取得。
  • 循環依存関係を壊します。
  • スコープを抽象化して、包含スコープ内のインスタンスからより小さなスコープ内のインスタンスを検索できるようにします。

Java EE ドキュメントから:プロバイダー

UPDATE: Java EE ドキュメンテーション: Inject Annotationでは、クラス内の循環依存をProvider.

保守的なインジェクターは、ビルド時に循環依存関係を検出してエラーを生成する可能性があります。その時点で、プログラマーは、A または B の代わりに Provider または Provider をそれぞれ注入することによって、循環依存関係を破ることができます。

于 2013-03-07T15:13:41.637 に答える