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中所持有的那个单例。