Spring和Strust整合時,通常狀況下,Action都是由struts2-spring-plugin-2.3.16.3.jar這個插件生成管理的,也就是Strust生成的。此時的配置以下:spring
Action類:jsp
public class LoginAction extends ActionSupport { private UserService service; public void setService(UserService service){ this.service = service; } /*省略了一些內容*/ @Override public String execute() throws Exception { /*省略了一些內容*/ } }
Strust.xml:ide
注意:下面配置中的class是全限定名this
<package name="from" namespace="/from" extends="struts-default"> <action name="loginaction" class="com.cn.shop.action.LoginAction"> <result> /login.jsp </result> </action> </package>
根據上面的配置,Action將由Strust生成,而且Strust會根據Action的成員變量,在Spring容器中找是否有相應的成員變量實例,若是有則會自動注入,如:UserService。若是Spring中沒有,則須要手動賦值。spa
然而在有些時候咱們須要使用Spring來生成管理Action,此時配置以下:prototype
Action類:插件
注意:此時的service要加上註解,讓Spring注入code
@Component("loginAction") //須要時就加上多例的註解 @Scope("prototype")//多例 每一個請求都new 一個新的實例。。若是不一樣的請求使用同一個實例則容易相互影響 public class LoginAction extends ActionSupport { private UserService service; @Resource(name="service") public void setService(UserService service){ this.service = service; } /*省略了一些內容*/ @Override public String execute() throws Exception { /*省略了一些內容*/ } }
strust.xml:
注意:此處的class是上面Action在Spring容器中的名字,而不是全限定名。說明這裏使用的是Spring生成的Actionxml
<package name="from" namespace="/from" extends="struts-default"> <action name="loginaction" class="loginAction"> <result> /login.jsp </result> </action> </package>