我遇到以下問題。我有一個應用程序與struts2,彈簧和struts2彈簧插件啓動和運行。通過Spring的依賴注入通常工作。 (例如,將一個bean注入到一個Action中)但是:我的Action-classes不會按照定義的每個會話的春季注入。 Actions構造函數被稱爲per requestuest。春天似乎不使用Spring的對象工廠。當在struts.xml中定義Action而不是使用@Action Annotations時,依賴注入將起作用!Struts2 Spring插件:帶註釋操作的依賴注入不起作用
這裏有一些片段:這裏我已經定義了一個bean和一個Action。注入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();
}
在這裏,操作的執行:
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://本地主機/對myApp /患者」 使得操作-類的實例對每個請求,而不進入public PatientAction PatientAction()
方法。
當我在支柱用這個,XML:
<package name="default" extends="struts-default">
<action name="foo" class="patient">
<result>list.jsp</result>
</action>
</package>
而且叫的 「http://本地主機/對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
誰能告訴我我在做什麼毛病註解?
我不確定這句話的含義「動作構造函數是每個reqiuest調用的」 – 2012-02-27 04:16:25
每當客戶端(例如瀏覽器)發送一個請求時,就會創建一個動作的新實例。我不希望每次都有新的實例。我希望Spring IoC能夠在Web會話範圍中進行操作。 – Tarator 2012-03-02 16:05:55
我不會建議你這樣做,因爲S2操作不僅適用於您的特定請求的中央處理,而且還可以作爲用於傳輸數據的模型,所以這就是爲什麼它們是在每個請求和它根據S2的體系結構,核心行爲的變化可能導致包括不一致結果在內的不良結果 – 2012-03-02 17:11:06