1

我是 Spring 的新手,并试图让事情顺利进行。我想使用基于 xml setter 的依赖注入并避免在 Java 中使用“@whatever”标记。

我正在使用带有 Spring 3.1.1 的 NetBeans 7,并且项目中有一些 Struts 2 代码也可以正常工作。

我遇到的问题是依赖注入似乎根本不起作用(accountService 仍然为 NULL),所以我猜我没有正确配置。任何帮助,将不胜感激!

BaseActionUserAware 是需要注入的类:

public class BaseActionUserAware extends BaseAction
{
    protected AccountService accountService;
    protected String username;

    @Override
    public String execute() {
        super.execute();

        // accountService = new AccountServiceImpl();

        Object accountID = session.get(SessionProperties.ACCOUNT_ID);
        if(null != accountID) {
            AccountBean account = accountService.getAccount((int)accountID);
            username = account.getUsername();
        }

        return SUCCESS;
    }

    public void setAccountService(AccountService accountService) {
        this.accountService = accountService;
    }

    public String getUsername() {
        return username;
    }
}

...注释代码表明我想完成什么;我想用 AccountServiceImpl 注入 accountService。

这是我的 WEB-INF/applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

    <bean id="accountService" class="hyperbook.service.impl.AccountServiceImpl"/>

    <bean id="baseActionUserAware" class="hyperbook.action.BaseActionUserAware">
        <property name="accountService" ref="accountService"/>
    </bean>

</beans>

...我已经仔细检查了完全限定的类名,这些都是正确的。

我最近在我的 WEB-INF/web.xml 文件中添加了以下内容,但它根本没有帮助:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

再次,任何帮助将不胜感激。谢谢!!

[编辑] 我还应该提到 - BaseActionUserAware 从未在 Java 中的任何地方专门实例化。相反,它专门用于 Struts 2 动作类的扩展。因此,applicationContext.xml 中的 baseActionUserAware 定义可能完全错误/不需要。我只是对Spring还不够了解。

4

1 回答 1

1

您需要使用 Struts 2 Spring 插件,否则 Spring 不知道它应该对 S2 动作做任何事情。一旦您将 S2 插件放入(使用 Maven,因此其他依赖项会自动出现),您基本上在配置 Spring 上下文加载器侦听器之后就完成了。

您不需要Spring 配置文件中定义您的操作,但您可以. 是否需要取决于您的接线方式,例如,如果您按名称自动接线,则可以跳过它。

于 2013-06-25T21:12:14.560 回答