gpt4 book ai didi

java - 什么时候在 Spring 中使用 javax.inject.Provider?

转载 作者:IT老高 更新时间:2023-10-28 13:49:04 25 4
gpt4 key购买 nike

它的作用很简单:

@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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com