gpt4 book ai didi

java - 注入(inject)单例 bean 时,Spring 的 @RequestScope 会自动处理代理吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:44:48 26 4
gpt4 key购买 nike

我正在使用 Java8/Spring Boot 2 应用程序。我想将一个请求范围的 bean 注入(inject)到一个单例 bean 中。 official documentation强调应使用代理或 ObjectFactory/Provider 来确保在运行时始终在单例 bean 中获得正确作用域的 bean。但是,@RequestScope 注释似乎“自动”设置了某种代理,如对 this question 的回答中所述。 .

我现在想知道以下三个实现是否实际上相同,哪个是首选?

方法 1:显式使用 objectFactory<>

@Component
@RequestScope
public class MyRequestScopedBean{...}

@Component
public class MySingletonBean{
@Autowired
private ObjectFactory<MyRequestScopedBean> myRequestScopedBean
}

方法 2:正常注入(inject),假设请求作用域 bean 被自动代理?

@Component
@RequestScope
public class MyRequestScopedBean{...}

@Component
public class MySingletonBean{
@Autowired
private MyRequestScopedBean myRequestScopedBean
}

方法 3:使用 @Configuration 和 @Bean 因为我不知道它们的区别并且我担心它们的行为不同。

@Comfiguration
public class myBeanConfig{
@Bean
@RequestScope
public MyRequestScopedBean getRequestScopedBean(){return new MyRequestScopedBean();}

}

@Component
public class MySingletonBean{
@Autowired
private MyRequestScopedBean myRequestScopedBean
}

我更喜欢方法 2,因为它简洁并且自动处理范围/代理。

如果我的@Autowired bean 声明为final 字段,答案会改变吗?我担心将其设置为 final 会以某种方式阻止代理在每次请求时正确获取新 bean。

最佳答案

我一直在我的项目中使用第二种方法,到目前为止我的问题为零。该文档没有提到必须也使用 ObjectFactory。不要想太多。如果遇到任何问题,您会在控制台中非常清楚地看到错误。在您有实际问题需要处理之前,没有理由害怕。

关于java - 注入(inject)单例 bean 时,Spring 的 @RequestScope 会自动处理代理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56217321/

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