2013-03-07 61 views
1

我有一个类春原型或供应商从Java EE

public class Test { 

    @Autowired 
    private Testing abc; 

    public Testing getTesting() { 
    return abc; 
    } 

} 

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

    private int i; 
} 

每次我手动创建使用自动装配能够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 
} 

它提供了什么好处的一个新的概念?

回答

2
  • 检索多个实例。
  • 懒惰或可选检索实例。
  • 打破循环依赖。
  • 抽象范围,因此您可以在包含范围内的实例中查找范围较小的实例。

Java EE Documentation:Provider

UPDATE: Java EE Documentation: Inject Annotation讨论如何在类循环依赖可使用Provider被打破。

保守喷射器可能检测到在构建 时间循环依赖和产生误差,在该点处程序员可以通过分别注入提供商或提供商 代替A或B的断裂 的循环依赖关系。

+0

但是它真的有用,如果我将永远需要一个实例?..即时通讯问作为即时通讯与开发人员在这个话题上的谈话,他试图说服我提供者是更好的方法?上例中的区别。 – user1555190 2013-03-07 15:19:48

+0

已更新答案以包含可能对您有帮助的链接和说明。我不是这个主题的专家。所以不能评论具体情况。但看看目前的例子(并不复杂),似乎使用任何方法都是平等的。 – 2013-03-07 15:46:07