[英]Unable to inject request scoped bean in spring
所以我有这个bean用于数据库管理。 我用以下方式定义它:
<bean id="dbmanager" class="rpg.commons.database.DBManager" scope="request"/>
然后我尝试将它放入控制器
@Controller
public abstract class AbstractController {
@EJB
protected DBManager dbmanager;
...
}
我也尝试了@Autowired,但在每种情况下,当我尝试在我的glassfish服务器上部署它时,我得到以下异常
java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homePageController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected rpg.commons.database.DBManager rpg.web.controllers.AbstractController.dbmanager; nested exception is java.lang.UnsupportedOperationException
homePageController是一个简单的控制器,它继承了我的AbstractController。 我也试图将这个领域改为公开,但它没有改变任何东西......
您不能直接将请求范围的bean注入sigleton,而是注入请求范围的代理:
<bean id="dbmanager" class="rpg.commons.database.DBManager" scope="request">
<aop:scoped-proxy/>
</bean>
@EJB是一个用于注入的注释,你期望的...... EJB。 因为你的bean不是一个当然不会起作用的EJB。 以下是使用Spring处理依赖注入的两种方法:
<bean id="dbmanager" class="rpg.commons.database.DBManager" scope="request"/>
<bean id="abstractController" class="rpg.commons.database.AbstractController">
<property name="dbmanager" ref="dbmanager" />
</bean>
Spring有@Autowired
注释用于处理依赖注入,但你需要在xml中“打开”注释扫描:
<context:component-scan base-package="rpg.commons.database" />
然后下面的结构将工作:
@Autowired
protected DBManager dbmanager;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.