如果轉(zhuǎn)載文章請(qǐng)注明出處, 謝謝 !
本系列文章是學(xué)習(xí)完 Spring4.3.8 后的詳細(xì)整理, 如果有錯(cuò)誤請(qǐng)向我指明, 我會(huì)及時(shí)更正~??
Spring4.3.8
Spring4.3.8學(xué)習(xí)[一]
Spring4.3.8學(xué)習(xí)[二]
Spring4.3.8學(xué)習(xí)[三]
5. Spring 與 Struts2 整合
先寫一個(gè)經(jīng)典的三層架構(gòu)
public interface UserDao {
public void add();
}
--------------
public class UserDaoImpl implements UserDao {
@Override
public void add() {
System.out.println("添加成功~");
}
}
---------------
public interface UserService {
public void register();
}
---------------
public class UserServiceImpl implements UserService {
private UserDao dao;
public void setDao(UserDao dao) {
this.dao = dao;
}
@Override
public void register() {
dao.add();
}
}
applicationContext.xml:
<bean name="userDao" class="com.lanou.dao.impl.UserDaoImpl"/>
<bean name="userService" class="com.lanou.service.impl.UserServiceImpl">
<property name="dao" ref="userDao"/>
</bean>
在應(yīng)用啟動(dòng)時(shí)默認(rèn)加載 spring 的 applicationContext 配置文件, 所以在 web.xml 中進(jìn)行注冊(cè)監(jiān)聽器
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
這個(gè) listener 在 spring-web jar 包中,如果沒有需要導(dǎo)入 jar 包
5.1 方式一
動(dòng)作類還是 Struts2 負(fù)責(zé)管理, 只向 spring 容器要service 實(shí)例
public class UserAction extends ActionSupport {
// 需要和 spring 中的 bean 名字保持一致!
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public String register() {
userService.register();
return SUCCESS;
}
}
struts.xml:
<package name="p1" extends="struts-default">
<action name="register" class="com.lanou.web.action.UserAction" method="register">
<result name="success">/success.jsp</result>
</action>
</package>
但是這時(shí)候訪問 register , 會(huì)出現(xiàn)空指針, 因?yàn)?userService 不存在, 它是由 spring 的 BeanFactory 管理的,而 userAction 是由 ObjectFactory 管理的, ObjectFactory目前不能夠從 Spring 容器獲取userService.
解決辦法:
添加 struts2和spring 的插件, 在 struts2的包中: struts2/lib/struts2-spring-plugin.jar
在struts.xml 配置文件中替換類
<!-- 替換默認(rèn)的產(chǎn)生動(dòng)作實(shí)例的工廠為 spring —>
<constant name="struts.objectFactory" value="spring"/>
**但是不需要做. 拷貝的 jar 包中有 struts-plugin.xml, 里面有這項(xiàng)配置 **
5.2 方式二
動(dòng)作類也交給Spring 管理, 這時(shí)不需要 struts2-spring-plugin.jar
applicationContext.xml:
<!— 實(shí)例化動(dòng)作類 — >
<bean name="registAction" class="com.lanou.web.action.UserRegistAction" scope="prototype">
<property name="userService" ref="userService"/>
</bean>
struts.xml:
將class修改成applicationContext.xml中配置 bean 的name
<package name="p1" extends="struts-default">
<action name="register" class="registerAction" method="register">
<result name="success">/success.jsp</result>
</action>
</package>
Spring4.3.8學(xué)習(xí)之與Hibernate4 整合[五]
Spring4.3.8學(xué)習(xí)之S2SH 整合[六]