我正在使用Java8 / Spring Boot 2应用程序。我想将请求范围的bean注入到singleton bean中。 official documentation突出显示应该使用代理或ObjectFactory / Provider来确保始终在运行时在单例bean中获得正确作用域的bean。但是,@RequestScope批注似乎是“自动”设置某种代理,如this question的答案所述。我现在想知道以下三种实现方式是否完全相同,哪种更可取?方法1:显式使用objectFactory @Component@RequestScopepublic class MyRequestScopedBean{...}@Componentpublic class MySingletonBean{ @Autowired private ObjectFactory<MyRequestScopedBean> myRequestScopedBean}方法2:正常注入,假设请求范围内的bean被自动代理了? @Component@RequestScopepublic class MyRequestScopedBean{...}@Componentpublic class MySingletonBean{ @Autowired private MyRequestScopedBean myRequestScopedBean}方法3:使用@Configuration和@Bean,因为我不知道它们之间的区别,并且我担心它们的行为会有所不同。 @Comfigurationpublic class myBeanConfig{ @Bean @RequestScope public MyRequestScopedBean getRequestScopedBean(){return new MyRequestScopedBean();}}@Componentpublic class MySingletonBean{ @Autowired private MyRequestScopedBean myRequestScopedBean}我更喜欢方法2,因为它简洁明了,并且可以自动处理作用域/代理。如果将我的@Autowired bean声明为final字段,答案会改变吗?我担心最终将以某种方式使代理无法正确获取每个请求的新bean。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我在项目中一直使用第二种方法,到目前为止,我的问题是零。该文档没有提及使用ObjectFactory也必须。不要想太多。如果遇到任何问题,您将在控制台中非常清楚地看到该错误。在您遇到实际问题之前,没有理由害怕。 (adsbygoogle = window.adsbygoogle || []).push({});
07-27 13:50