简体   繁体   English

Java EE的Spring原型或提供程序

[英]Spring prototype or provider from Java EE

I have a class 我有一堂课

public class Test {

   @Autowired
   private Testing abc;

   public Testing getTesting() {
     return abc;
   }

}

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

   private int i;
}

Everytime I manually create class Test using the autowire capable bean factory, i expect an instance of Testing to be created. 每次我使用具有自动装配功能的bean工厂手动创建Class Test类时,都希望创建一个Testing实例。

However today i was introduced to a new concept of javax.inject.Provider 但是今天我被介绍给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
}

What benefit does it provides? 它提供什么好处?

  • retrieving multiple instances. 检索多个实例。
  • lazy or optional retrieval of an instance. 实例的惰性或可选检索。
  • breaking circular dependencies. 打破循环依赖。
  • abstracting scope so you can look up an instance in a smaller scope from an instance in a containing scope. 抽象作用域,以便您可以从包含作用域的实例中查找范围较小的实例。

From Java EE Documentation:Provider 来自Java EE文档:提供程序

UPDATE: Java EE Documentation: Inject Annotation discusses how circular dependencies in classes can be broken using Provider . 更新: Java EE文档:注入注释讨论了如何使用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. 保守的注入器可能会在构建时检测到循环依赖关系并生成错误,此时程序员可以通过注入Provider或Provider而不是A或B来打破循环依赖关系。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM