我最近对我的 Spring Boot 项目进行了更改。我最初有一个没有特定范围的 bean。由于使用线程的实现以及并发问题的发生,我需要创建另一个与前一个相同的 bean,但具有使用 SimpleThreadScope 的线程作用域。但是,当我在服务中使用第一个 bean 进行批处理时,第二个 bean 被错误地注入,即使引用指示第一个 bean。为了解决这个问题,我无法向bean添加限定符,因为项目非常大。
下面是我的代码结构。
app-config.xml
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="thread">
<bean class="org.springframework.context.support.SimpleThreadScope"/>
</entry>
</map>
</property>
</bean>
<bean id="reportService" class="it.myproject.service.report.ReportService">
<property name="exporter" ref="exporter" />
<property name="writer" ref="writer" />
</bean>
<bean id="reportServiceAsync" class="it.myproject.service.report.ReportService" scope="thread">
<aop:scoped-proxy/>
<property name="exporter" ref="exporter" />
<property name="writer" ref="writer" />
</bean>
<bean id="myMagicBean" class="it.myproject.batch.MyMagicBean">
<property name="reportService" ref="reportService" />
</bean>
我无法理解为什么
myMagicBean
注入 reportServiceAsync
而不是 reportService
,如我的配置中所定义。
如何解决这个问题? 谁能解释一下为什么会发生这种情况?
提前非常感谢您的帮助。
感谢@M.Deinum的评论,我意识到问题出在我的
ReportService
中,并且使用线程范围是不合适的。我通过删除各种方法之间的共享属性解决了这个问题。