1

我有一堂课

public class Test {

   @Autowired
   private Testing abc;

   public Testing getTesting() {
     return abc;
   }

}

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

   private int i;
}

每次我使用支持自动装配的 bean 工厂手动创建类 Test 时,我都希望创建一个测试实例。

然而今天我被介绍了一个新概念 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 文档:Provider

更新: Java EE 文档:Inject Annotation讨论了如何使用Provider.

A conservative injector might detect the circular dependency at build time and generate an error, at which point the programmer could break the circular dependency by injecting Provider or Provider instead of A or B respectively.

于 2013-03-07T15:13:41.637 回答