繁体   English   中英

无法在spring中注入请求范围的bean

[英]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>

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-scopes-other-injection

@EJB是一个用于注入的注释,你期望的...... EJB。 因为你的bean不是一个当然不会起作用的EJB。 以下是使用Spring处理依赖注入的两种方法:

通过xml注入

<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM