来自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在上面的示例中看到了差异。更新了答案以包含可能对您有帮助的链接和说明。我不是这方面的专家。因此,我们无法对具体情况发表评论。但看看目前的例子(不太复杂),似乎使用任何一个都是平等的。