baidu_25467819
missfmaster
采纳率100%
2015-01-30 07:58 阅读 1.8k
已采纳

Spring如何给Struts生成新action对象?

Spring3.2.12
Struts2.3.20

看struts代码:

@Component
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
@ParentPackage("struts-default")
@Namespace("/test")
public class TestAction {

    private String flag;

    @Action(value = "testAction", results = { @Result(name = "success", location = "/index.jsp") })
    public String test() {
        System.out.println("request struts.");
        try {
            WebApplicationContext context = WebApplicationContextUtils
                    .getWebApplicationContext(ServletActionContext.getServletContext());
            TestAction test = context.getBean("testAction", TestAction.class);
            System.out.println("this:" + this.flag+"\t" + this);
            System.out.println("spring:" + test.flag+"\t" + test);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "success";
    }

    @PostConstruct
    public void setFlag() {
        this.flag = "From Spring";
    }

运行结果:

 request struts.
this:From Spring    toString:com.me.permission.action.TestAction@732efcfe
spring:From Spring  toString:com.me.permission.action.TestAction@2140243b
request struts.
this:From Spring    toString:com.me.permission.action.TestAction@11e3c2c6
spring:From Spring  toString:com.me.permission.action.TestAction@2140243b
request struts.
this:From Spring    toString:com.me.permission.action.TestAction@521d590d
spring:From Spring  toString:com.me.permission.action.TestAction@2140243b

运行结果 说明,spring中持有一个TestAction的对象,而且是单例;
请求action的时候,是spring给struts生成的action,但是每一次都是新的,并不是spring所持有的那个单例,这是为什么哪?
怎么才能让spring所持有的那个单例,给struts哪?让struts每次请求都使用spring中所持有的那个单例。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    baidu_25467819 missfmaster 2015-02-26 07:11

    谢谢各位了,查看了下源码,发现此处配置有错误。
    action不需要配置
    @Component
    @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON),
    _而struts在通过插件向spring索要action对象的时候,给spring传递的是此action的全类名,所以不需要再spring中配置action的bean,spring也可以根据struts提供的全类型找到该bean,并将其实例化,交给struts。

    点赞 评论 复制链接分享
  • wsm201005030226 诺维茨基 2015-02-05 09:52

    将TestAction对象生成方式采用静态方式生成,在TestAction声明静态代码块来获取该对象

    点赞 评论 复制链接分享
  • u012745028 胡jj 2015-02-06 06:55

    有一个包叫做 struts2-spring-plugin-2.1.6.jar,再去web.xml里面配置 一下就OK了

    contextConfigLocation
    <!-- /WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml -->
    classpath:beans.xml

     <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        <!-- default: /WEB-INF/applicationContext.xml -->
    </listener>
    
    点赞 评论 复制链接分享

相关推荐