它的作用很简单:
@Inject
private Provider<ProductService> productService;
产品服务可通过 productService.get()
获得,.get()
将在每次调用时从 Spring 上下文中解析实例。
但是我应该什么时候使用它呢?在哪里?
我的主要用例非常简单:当我获得循环依赖项时,提供程序会在运行时帮助解决依赖项。但是,如果您只是在由于循环依赖而无法创建上下文时将其放入,它看起来有点随机。
关于 Providers 的使用是否有任何已知模式?
最佳答案
在 cdi 中,提供程序用于将范围更窄的对象注入(inject)范围更广的 bean,例如,如果 session 范围的 bean 需要访问请求范围的对象,它会注入(inject)一个提供程序,然后是一个正在运行的方法在请求中,调用 provider.get()
以获取对适当请求范围对象的局部变量引用。
鉴于以下情况:
@RequestScoped
public class Bean1 {
void doSomething();
}
以下将使用与 session 中第一个请求关联的 Bean1 实例来使用 Bean2,而不管哪个请求正在调用 Bean2.doSomething():
@SessionScoped
public class Bean2 {
@Inject Bean1 bean;
public void doSomething() {
bean.doSomething();
}
}
以下将使用与当前调用 Bean3.doSomething() 的特定请求关联的 Bean 实例,即每个请求的不同 bean:
@SessionScoped
public class Bean3 {
@Inject Provider<Bean1> bean;
public void doSomething() {
bean.get().doSomething();
}
}
关于java - 什么时候在 Spring 中使用 javax.inject.Provider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16435117/