我有以下问题。我有一个带有 struts2、spring 和 struts2-spring-plugin 的应用程序启动并运行。通过 Spring 的依赖注入通常可以正常工作。(例如。将 bean 注入到动作中)但是:我的动作类不是按照定义的每个会话通过 spring 注入的。按要求调用 Actions 构造函数。似乎 spring 不使用 Spring 的对象工厂。在 struts.xml 中定义 Action 而不是使用 @Action Annotations 时,依赖注入有效!
这里有一些片段: 这里我定义了一个 bean 和一个动作。注入 bean 是有效的,但是在使用 @Action 注释时,这里永远不会创建 Action。
@Bean
@Scope(value="session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public PatientForm PatientForm(){
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>> PatientForm() ");
return new PatientForm();
}
@Bean(name="patient")
@Scope(value="request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public PatientAction PatientAction(){
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>> PatientAction() ");
return new PatientAction();
}
这里执行Action:
public class PatientAction extends TherapyActionSupport {
private static final Logger logger = LoggerFactory.getLogger(PatientAction.class);
@Autowired
private PatientForm form;
public PatientAction(){
logger.debug("Constructor called.");
}
@Override
@Action( name="/patient",
results={
@Result(name=SUCCESS, location="/therapy/patient/edit.jsp"),
@Result(name=ERROR, location="/therapy/patient/edit.jsp"),
@Result(name=INPUT, location="/therapy/patient/edit.jsp")
}
)
@SkipValidation
public String execute() throws Exception {
logger.info("Execute called.");
return SUCCESS;
}
@Action(value="/save",
results={
@Result(name=SUCCESS, location="/therapy/patient/list.jsp"),
@Result(name=ERROR, location="/therapy/patient/edit.jsp"),
@Result(name=INPUT, location="/therapy/patient/edit.jsp")
}
)
public String savePatient() throws Exception{
try {
logger.info("Saving patient.");
getForm().savePatient();
return list();
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
}
}
调用 URL“http://localhost/myApp/patient”会在每个请求上创建一个 Action-Class 实例,而无需输入public PatientAction PatientAction()
方法。
当我在struts中使用它时,xml:
<package name="default" extends="struts-default">
<action name="foo" class="patient">
<result>list.jsp</result>
</action>
</package>
并调用“http://localhost/myApp/foo”该动作是通过弹簧注入的。
这是我的 struts.properties 文件:
struts.i18n.encoding=UTF-8
struts.objectFactory = spring
## Tried settings with autoWire
#struts.objectFactory.spring.autoWire = auto
struts.objectFactory.spring.autoWire = type
我使用的版本(通过 Maven :)
struts2-core 2.2.3.1
spring3 3.1.1.RELEASE
struts2-spring-plugin 2.3.1.2
谁能告诉我我在注释上做错了什么?