首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

ssh中调整,为什么将Action交由Spring托管,才可以在Action中使用依赖注入

2012-10-28 
ssh中整合,为什么将Action交由Spring托管,才可以在Action中使用依赖注入!ssh中整合,为什么将Action交由Spr

ssh中整合,为什么将Action交由Spring托管,才可以在Action中使用依赖注入!
ssh中整合,为什么将Action交由Spring托管,才可以在Action中使用依赖注入!
传统正确的整合方式:
struts-config.xml:
<struts-config>
  <data-sources>
  <form-beans>
    <form-bean name="loginForm" type="com.yourcompany.struts.form.LoginForm">
  </form-beans>
  <action-mappings>
    <action <br="">      attribute="loginForm"
      input="/form/login.jsp"
      name="loginForm"
      path="/login"
      scope="request"
      type="org.springframework.web.struts.DelegatingActionProxy">  //使用代理
      <forward name="show" path="/show.jsp">
    </action>
  </action-mappings>
  <message-resources parameter="com.yourcompany.struts.ApplicationResources">
<plug-in classname="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml">
</plug-in>
</struts-config>

applicationContext.xml:
<beans>
<bean id="personDAO" ref="personDAO">
</property>
</bean>
</beans>

web.xml:

<context-param>   
<param-name>contextConfigLocation</param-name>   

<param-value>/WEB-INF/applicationContext*.xml</param-value>   
</context-param>   
<listener>   
<listener-class>org.springframwork.web.content.ContextLoaderListener</listener-class>   
</listener> 


这样一来:我想在action里面注入server,只要在action里面
privaet PersonDAO personDAO;
public PersonDAO getPersonDAO() {
return personDAO;
}
public void setPersonDAO(PersonDAO personDAO) {
this.personDAO = personDAO;
}

就可以拿到personDAO对象想干吗就干吗了。。


我的问题是:

我前几天一个不小心有个问题没弄明白:为什么将Action交由Spring托管,才可以在Action中使用依赖注入!
我的:
struts-config.xml:
<action-mappings>
    <action <br="">      attribute="loginForm"
      input="/form/login.jsp"
      name="loginForm"
      path="/login"
      scope="request"
      type="com.yourcompany.struts.action.LogAction">  //不使用代理
      <forward name="show" path="/show.jsp">
    </action>

applicationContext.xml:
<beans>
<bean id="personDAO" ref="personDAO">
</property>
</bean>
</beans>

然后在action里面
privaet PersonDAO personDAO;
..get()和..set()居然拿到的personDAO是空。为什么??

为什么:<bean id="personDAO" class="com.deng.PersonDAO">直接在spring里面直接写可以,而action非要托管才能注入,不能象server啊 dao之类的直接在applicationContext.xml里面写配置。



因为Action 类不是普通的类似于我们自己写的 dao层 或者service层 的类,

它是由Struts 框架来支持产生的,所以说不能简单的用类似于dao层或者 service层

的依赖注入方式来,所以要使用Spring 中的 DelegatingActionProxy(授权Action代理),实现了针对实际Action的调用代理,struts最终调用的将是由

spring管理的Action实例,这样客户端发送的各种请求就可以用spring的Ioc设计思

想实现了。

详细的可以百度一下 DelegatingActionProxy 的意思,其实本身struts框架中也包含这个的。

热点排行