Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自JavaEE的Spring原型或提供程序_Java_Spring_Jakarta Ee - Fatal编程技术网

来自JavaEE的Spring原型或提供程序

来自JavaEE的Spring原型或提供程序,java,spring,jakarta-ee,Java,Spring,Jakarta Ee,我有一节课 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工厂手动创建类测试时

我有一节课

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工厂手动创建类测试时,我都希望创建一个测试实例

然而,今天我被介绍了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
}
公共类测试{
@自动连线
私人供应商abc;
公共测试getTesting(){
返回abc.get();
}
}
@组成部分
@范围(BeanDefinition.Scope\u原型)
公共类测试{
私人互联网i;
//事务方法
}
它提供了什么好处

  • 正在检索多个实例
  • 对实例的延迟或可选检索
  • 打破循环依赖关系
  • 抽象范围,以便可以从包含范围中的实例中查找较小范围中的实例

更新: 讨论如何使用
Provider
打破类中的循环依赖关系

保守的注入器可能在构建时检测到循环依赖性 计时并生成一个错误,此时程序员可能会中断 通过注入提供程序或提供程序创建循环依赖项 而不是分别为A或B


但如果我总是需要一个实例,它真的有用吗?。。当我和一个开发人员就这个话题进行对话时,我问他,他试图说服我提供商是更好的方法吗?。。ic ant在上面的示例中看到了差异。更新了答案以包含可能对您有帮助的链接和说明。我不是这方面的专家。因此,我们无法对具体情况发表评论。但看看目前的例子(不太复杂),似乎使用任何一个都是平等的。