久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

struts 集成Spring 將Action控制權(quán)轉(zhuǎn)交給Spring IOC 控制并在Spring中注入對象給Struts Action

 履歷館 2011-11-21

public class SaveAction extends Action {
private TranscationServices transcationServices;
 
 
 
private ActionForward savePO(ActionMapping mapping) {
 
getTranscationServices().saveDetail(detaPar);
}
 
 public TranscationServices getTranscationServices() {
//  return (TranscationServices) ctx.getBean("insertServices");
  return this.transcationServices;
 }
 public void setTranscationServices(TranscationServices transcationServices) {  
//  this.transcationServices = (TranscationServices) ctx.getBean("injectedtranscationServices");
  this.transcationServices =transcationServices;
 }
}
 
 
Struts 配置文件部分:type 換成Spring 代理類,。
  <action path="/vendition/savePodses" attribute="podsesListForm"
   input="/vendition/podsesList.jsp" name="podsesListForm"
   scope="request" type="org.springframework.web.struts.DelegatingActionProxy"
   validate="false">
   <forward name="success" path="/vendition/podses.do?save">
   </forward>
   <forward name="modifysave"
    path="/vendition/podses.do?modifysave">
   </forward>
   <forward name="error" path="/vendition/podsesList.jsp">
   </forward>
  </action>
 
Spring 配置部分:
<bean id="injectedtranscationServices" class="com.dses.services.BeanFactory" factory-method="newServicesInstance">
  <property name="podsesListDAO" ref="podsesListDAO"></property>
  <property name="partsDAO" ref="partsDAO"></property>
  <property name="subBeanServices" ref="inectedBeanServices"></property>
 </bean>
 
 <bean name="/vendition/savePodses" class="com.dses.action.SavePodsesAction">
  <property name="transcationServices" ref="injectedtranscationServices"></property>
 </bean>
 
--------------------------------------------------------------------------------------------------------------------------------------------------------
1. 項目需要有Struts包和Spring的core, aop, web 三個包(注意不是Spring自己的Web MVC), 將Spring整合Strus,。具體的 .classpath 文件如下所示:
﹤?xml version="1.0" encoding="UTF-8"?﹥   
﹤classpath﹥   
﹤classpathentry kind="src" path="src"/﹥   
﹤classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/﹥   
﹤classpathentry kind="con" path="com.genuitec.core.J2EE14_CONTAINER"/﹥   
﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/antlr.jar"/﹥   
﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/beanutils.jar"/﹥   
﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/digester.jar"/﹥   
﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/fileupload.jar"/﹥   
﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/logging.jar"/﹥   
﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/validator.jar"/﹥   
﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/jakarta-oro.jar"/﹥   
﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/struts.jar"/﹥   
﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/mysql-connector-java--bin.jar"/﹥   
﹤classpathentry kind="con" path="melibrary.com.MYECLIPSE_SPRING20_CORE"/﹥   
﹤classpathentry kind="con" path="melibrary.com.MYECLIPSE_SPRING20_AOP"/﹥   
﹤classpathentry kind="con" path="melibrary.com.MYECLIPSE_SPRING20_WEB"/﹥   
﹤classpathentry kind="output" path="WebRoot/WEB-INF/classes"/﹥   
﹤/classpath﹥  
2. 對Struts 配置文件做修改加入Spring 托管功能.
創(chuàng)建 Spring 配置文件,將文件放到src 目錄下,,文件名稱為 applicationContext.xml, 編譯后放到WEB-INF/classes/ 下.
配置struts-config.xml文件,,添加 spring的插件, 位置在 struts-config 文件的最末尾.
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">  
<set-property property="contextConfigLocation"  
value="/WEB-INF/classes/applicationContext.xml" />  
plug-in>  
3. 修改 Struts 的 struts-config.xml 中的Action配置,。原來的代碼:
改變后的代碼:
<action  
attribute="loginForm"  
input="/login.jsp"  
name="loginForm"  
path="/login"  
scope="request"  
validate="true"  
type="com.test.struts.action.LoginAction" />  
type 部份為修改內(nèi)容, 這里將使用spring的代理器來對Action進行控制. 當提交到/login.do是將控制權(quán)交給了spring,然后由spring來把它轉(zhuǎn)回到struts的Action.
4. Spring整合Strus,,需要配置spring來實例化上一步中被刪除的 Action 類.
<xml version="1.0" encoding="UTF-8"?>     
<beans>  
<bean name="/login" class="com.test.struts.action.LoginAction">bean>     
<beans>   
spring 通過 org.springframework.web.struts.DelegatingActionProxy 這個類, 然后根據(jù) Struts 配置文件中的 和 Spring 配置文件中的 來將 Spring 管理下的 Struts Action 類和提交的路徑匹配起來, 這些就是關(guān)于轉(zhuǎn)交控制權(quán)的配置內(nèi)容.
實踐的過程中發(fā)現(xiàn)必須把 singleton="false"去掉才行, 否則就會無法初始化 Spring 框架, 不知道具體的原因是什么.
既然這個 Struts的Action 已經(jīng)通過 Spring 來初始化, 所以就可以加入依賴注入, 整合Hibernate 的功能了. 例如典型的情況:
com.test.struts.action.LoginAction    
private UserManager userManager;    
public UserManager getUserManager()...   
public void setUserManager(UserManager userMgmr) ...    
public ActionForward execute(ActionMapping mapping,  
ActionForm form,   
HttpServletRequest request, HttpServletResponse response) {   
System.out.println("userManager=" + getUserManager());   
getUserManager().someBusinessMethods();   
.....   
}  
然后就可以配置:
<bean name="/login" class="com.test.struts.action.LoginAction">  
<property name="userManager">  
<ref bean="userManagerBean" />  
<property>  
<bean>      
<bean id="userManagerBean" class="manager.UserManager" />   
 
 
---------------------------------------------------------------------------------------------------
 

Spring實例化Bean的三種方式分別是

1,,xml配置使用bean的類構(gòu)造器

2,,xml配置+factory類,,使用靜態(tài)工廠方法實例化

3,xml配置+factory類,,使用實例工廠方法實例化

以下分別說明

1,,xml配置使用bean的類構(gòu)造器

2,xml配置+factory類,,使用靜態(tài)工廠方法實例化

Spring實例化Bean 的xml文件配置

xml文件名:beans.xml

文件內(nèi)容:

  1. ﹤?xml version="1.0" encoding="UTF-8"?﹥  
  2.  
  3. ﹤beans xmlns="http://www./schema/beans" 
  4.        xmlns:xsi="http://www./2001/XMLSchema-instance" 
  5.        xsi:schemaLocation="http://www./schema/beans  
  6.        http://www./schema/beans/spring-beans-2.5.xsd"﹥  
  7.  
  8.   ﹤!-- the application context definition for the springapp DispatcherServlet --﹥  
  9.  
  10.   ﹤bean id="sayhello" class="test.service.impl.HelloBean"/﹥  
  11.   ﹤bean id="sayhello2" class="test.service.impl.HelloBeanFactory" factory-method="createHelloBean"/﹥  
  12.   ﹤bean id="factory" class="test.service.impl.HelloBeanInstanceFactory"/﹥   
  13.   ﹤bean id="sayhello3" factory-bean="factory" factory-method="createHelloBean"/﹥   
  14.       
  15. ﹤/beans﹥ 

工廠Java文件

文件名:HelloBeanFactory.java

文件內(nèi)容:

  1. package test.service.impl;   
  2. import test.service.Hello;   
  3. public class HelloBeanFactory {   
  4. public static Hello createHelloBean() {   
  5. return new HelloBean();   
  6. }   

Bean接口文件

文件名:Hello.java

文件內(nèi)容:

  1. package test.service;   
  2. public interface Hello {   
  3. public void sayHello();   
  4. public void sayHello2();   
  5. public void sayHello3();   

Bean實現(xiàn)文件

文件名:HelloBean.java

文件內(nèi)容:

  1. package test.service.impl;   
  2. import test.service.Hello;   
  3. public class HelloBean implements Hello {   
  4. public void sayHello() {   
  5. System.out.println("這是一個測試程序");   
  6. }   
  7. @Override   
  8. public void sayHello2() {   
  9. System.out.println("這是一個測試程序,測試靜態(tài)工廠創(chuàng)建bean");   
  10. }   
  11. @Override   
  12. public void sayHello3() {   
  13. System.out.println("這是一個測試程序,測試實例工廠創(chuàng)建bean");   
  14. }   

3,,xml配置+factory類,使用實例工廠方法實例化

xml文件配置

xml文件名:beans.xml

文件內(nèi)容:參照方法2中的紅字部分

工廠Java文件

文件名:HelloBeanInstanceFactory.java

文件內(nèi)容:

  1. package test.service.impl;   
  2. import test.service.Hello;   
  3. public class HelloBeanInstanceFactory {   
  4. public Hello createHelloBean() {   
  5. return new HelloBean();   
  6. }   

Bean接口文件

文件名:Hello.java

文件內(nèi)容:參照方法2中的紅字部分

Bean實現(xiàn)文件

文件名:HelloBean.java

文件內(nèi)容:參照方法2中的紅字部分

Spring實例化Bean完成,,最后測試文件

文件名:FirstSpring.java

文件內(nèi)容:

  1. package test.spring;   
  2. import org.springframework.context.ApplicationContext;   
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  4. import test.service.Hello;   
  5. public class FirstSpring {   
  6. public static void main(String[] args) {   
  7. testHello();   
  8. testHelloForStaticFactory();   
  9. testHelloForInstanceFactory();   
  10. }   
  11. public static void testHello() {   
  12. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");   
  13. Hello hello =(Hello) applicationContext.getBean("sayhello");   
  14. hello.sayHello();   
  15. }   
  16. public static void testHelloForStaticFactory() {   
  17. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");   
  18. Hello hello =(Hello) applicationContext.getBean("sayhello2");   
  19. hello.sayHello2();   
  20. }   
  21. public static void testHelloForInstanceFactory() {   
  22. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");   
  23. Hello hello =(Hello) applicationContext.getBean("sayhello3");   
  24. hello.sayHello3();   
  25. }   

都寫完了,,來執(zhí)行一下,結(jié)果輸出:

這是一個測試程序

這是一個測試程序,測試靜態(tài)工廠創(chuàng)建bean

這是一個測試程序,測試實例工廠創(chuàng)建bean

總結(jié)

三種Spring實例化Bean方法的用處,,

第一種方法,,通過bean的缺省構(gòu)造函數(shù)創(chuàng)建,當各個bean的業(yè)務(wù)邏輯相互比較獨立的時候或者和外界關(guān)聯(lián)較少的時候可以使用,。

第二種方法,,利用靜態(tài)factory方法創(chuàng)建,可以統(tǒng)一管理各個bean的創(chuàng)建,,如各個bean在創(chuàng)建之前需要相同的初始化處理,,則可用這個factory方法險進行統(tǒng)一的處理等等。

第三種方法,,利用實例化factory方法創(chuàng)建,,即將factory方法也作為了業(yè)務(wù)bean來控制,覺得1可用于集成其他框架的bean創(chuàng)建管理方法,,2能夠使bean和factory的角色互換,。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多