`
jiony
  • 浏览: 183259 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Hibernate+Spring+Struts整合个人尝试方法

    博客分类:
  • SSH
阅读更多

      先从思路开始把,当我们学一种技术的时候,首先要的是我们的思路要清晰,这才有可能把它弄明白,所以我们平时要多锻炼自己的逻辑思维能力,尽量多地想一些实际问题。Hibernate是持久层,Spring是一个装载组件提供服务的容器,Struts是一种MVC模式的框架。所以我就从Spring着想:采取了三个方式来整合。

第一种方式:

采用spring自带的一个插件:org.springframework.web.struts.ContextLoaderPlugIn
在struts-config.xml 的<message-resources parameter="struts.ApplicationResources" />后面添加
 

<!-- struts插件 -->
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
   <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
  </plug-in>。 
 

但是当我们使用这种方式的时候需要注意一下:
1.我们在struts里的配置中的<action>配置中需要注意:需要用到spring中的动态struts代理:具体配置比如:
<!-- type:指的是spring中的动态struts代理,利用它可以截获对应的方法 所以此文件主要配置action中对应的方法-->
 

<action-mappings>
   <action path="/findAll"
           type="org.springframework.web.struts.DelegatingActionProxy"
           scope="request" parameter="findAll">
    <forward name="ok" path="/ok.jsp"/>
   </action>
</action-mappings> 
 

并且这里我们还需要复制一份spring的配置文件,文件名命名为:spring-action.xml(可以自己定义),作为专门配置action中的bean比如:
<!-- 此文件是配置一些对应的action模块的具体的类。
     name要与struts-config.xml的path对应 -->

<bean name="/findAll" class="actions.MappingActions">
      <property name="dao" ref="UserDAO"></property>
</bean> 
 2.还要注意的是,我们在action类中继承的是MappingDispatchAction,也就是说是利用Struts里中的

第二种方式: 采用Spring的Listener来监听获取Spring中的配置。主要操作是:
首先在web.xml中配置:
 

 <listener>
   <listener-class>
       org.springframework.web.context.ContextLoaderListener
  </listener-class>
</listener> 
 

但是当我们使用这种方式的时候需要注意一下:
1.我们在struts里的配置<action>不需要用到spring中的动态代理,直接配置,像纯struts里一样配置。
2.还要注意的是,我们在action类中继承的是MappingDispatchActionSupport,也就是说是利用Struts里中的,这样我们就可以通过spring的这个MappingDispatchActionSupport类中的方法获得在Spring中配置的bean:比如:在这个Action中我们需要用到UserDAO,我们就可以这样获得,这样减少了spring与struts的耦合度。
ApplicationContext context=this.getWebApplicationContext();
UserDAO dao=(UserDAO) context.getBean("UserDAO");
第三种方式:
我们直接在web.xml中配置以下信息:
 

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <servlet>
   <servlet-name>springInitServlet</servlet-name>
   <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
   <load-on-startup>2</load-on-startup>
  </servlet>
 我们同样使用的是struts的MappingDispatchAction,struts里的配置同样是纯Struts里的配置一样,不需要与spring的耦合,spring只与hibernate耦合。但是我们怎么获得spring里的bean注入呢?这就是关键了:比如我们在Action中需要调用service层的方法,则我们需要获得service的实例,但是又是事务层,我们通过了spring的事务管理机制来管理,也就是说我们需要获得这个service的在spring中的bean。注意我们通过:

WebApplicationContextUtils.getWebApplicationContext(this.getServlet().getServletContext());可以获得springContext.xml的配置文件信息,从而通过getBean("")的方法来获得这个service的实例。Ok.

public FileServiceInf getFileService(){
  ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(
       this.getServlet().getServletContext());
  return (FileServiceInf) ac.getBean("modelProxy");
}
 有兴趣的浏览者可以试着去作一下,我已经说得很明白了,注意:做IT的,就要学会做实验,计算机就是我们很好的老师,可以证明我们的所有观点。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics