读书人

Spring2+Hibernate3+Struts2调整文档

发布时间: 2012-07-03 13:37:42 作者: rapoo

Spring2+Hibernate3+Struts2整合文档
Spring的官方定义是:一个轻量级的IoC和Aop容器框架,它使用了一种叫做依赖注入的技术。

所谓依赖注入,就是指将创建对象以及协议依赖对象之间合作的责任从对象自身中转移到“工厂”中去,这个“工厂”通常由IoC容器提供。

Struts2与Spring的集成要用到Spring插件包,这个包是同Struts2一起发布的。Spring插件是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象的时候,它会用Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到则由Spring创建,否则由Struts2框架自身创建,然后由Spring来装配。Spring插件具体有如下几个作用:

1. 允许spring来创建Action、Interceptror和Result

2. 由Struts创建的对象能够被Spring装配

3. 提供了2个拦截器来自动装配action,如果没有使用Spring ObjectFactory的话

这里要注意的是,我们不必在Spring中去注册action,尽管我们可以这么去做,通常Struts框架会自动的从action mapping中创建action对象。

一、 Spring+Hibernate整合:
Spring整合Hibernate,是做了一个很大的调整的,因为spring可以把管理Hibernate的工作都做了,
以前的hibernate.cfg.xml文件都去掉了,而将这些内容都交给了spring来管理了。
1、 applicationContext.xml文件中应该配置如下内容:

Xml代码
//配置数据连接类


//配置session工厂类

//配置数据连接类

//配置session工厂类


2、可以使用spring中的HibernateDAOSupport与HibernateTemplate类来进行数据持久化操作:
A、HibernateDAOSupport类中定义了对session、sessionFactory的操作方法与getHibernateTemplate方法来获得一个HibernateTemplate实例;
B、HibernateTemplate类中定义了对数据持久化的各种封装的方法,我们可以用它来对数据进行操作。
因此在使用时,我们可以继承HibernateDAOSupport类,然后实例化HibernateTemplate类来进行数据持久化。

二、 Spring+Struts2整合:
1、spring配置在web.xml文件中的上下文监听器:

Xml代码



4、第三步设置后,以后在struts.xml 文件中配置一个action时,它的class就不是一个类了,而是在applicationContext.xml文件中定义过的类的ID,在struts.xml文件中就只需要引用定义好的类的id 就可以了。
然后特别要注意的一个问题:action是一个请求就是一个action对象,而在spring中则不是的,它是自动分配类的实例的,是使用的单态模式来生产类的实例的,不符合action,因此在applicationContext.xml文件中定义每个action时,都要在类后加上:

Xml代码
scope="prototype" 属性
scope="prototype" 属性
三、 三者组合开发:
一般在组合开发时,没有什么难的,只要把上面两步做好就可以是三个组合开发了。


上图则是对于进行组合开发时,一般使用的系统架构:
1、 先从最底层开发,先开发POJO类,和Hibernate映射文件。它相当于系统的数据库层。
2、 再开发DAO层,它是对于数据进行持久化的一层,专门处理各种数据增、删、改、查的功能。并且使用DAO工厂模式,以保证和上层没有任何的联系,并且可以方便于类与接口的扩展。
3、 第三是开发manager层,它相当于软件的业务逻辑层,即专门处理各种业务逻辑。实现系统的业务处理功能。并且它隔离事务,使与下层的数据持久和上层的数据操作没有任何的联系。
4、 Action层,也即软件的表示层,处理action的接收与回复。各action由spring管理。

五、 组合开发中的一些问题:

1、 在组合开发中,常见的一个问题就是session的管理,当我们使用HibernateTemplate操作数据库时,可以不对session进行显示的操作,spring可以自动处理session的打开与关闭。
我们可以在web.xml文件中显示的配置一个session管理的过滤器,它专门帮助我们关闭session:


Xml代码
<aop:config>      <aop:pointcut id=”allManagerMethod”expression=”execution(*   com.hejianjiao.hibernate.HibernateDAO.*(..))”/>//调用上面配置的事务属性,可以将它给本aop pointcut。      <aop:advisor advice-ref=”txAdvice” pointcut-ref=”allManagerMethod”/>//如果还有其它的定义,则可以再加上pointcut、advisor来定义本切面点的事务逻辑。</aop:config><aop:config>      <aop:pointcut id=”allManagerMethod”expression=”execution(*  com.hejianjiao.hibernate.HibernateDAO.*(..))”/>//调用上面配置的事务属性,可以将它给本aop pointcut。      <aop:advisor advice-ref=”txAdvice” pointcut-ref=”allManagerMethod”/>//如果还有其它的定义,则可以再加上pointcut、advisor来定义本切面点的事务逻辑。</aop:config>


//expression中的内容是要执行本切面的一个接口,中的所有方法:如:一个接口中定义了操作数据的方法:com.hejianjiao.hibernate.HibernateDAO,则下面execution括号中的内容就为:* com.hejianjiao.hibernate.HibernateDAO.*(..)。而如果在com.hejianjiao.hibernate包中还有其它的类也有操作方法,我们要一起定义的话,就可以写为:* com.hejianjiao.*.*(..),其中(..)表示的是方法,前面的第一个*是操作的接口或者类。
上面的配置将为由 'HibernateDAO' 定义的bean创建一个代理对象,这个代理对象被装配了事务通知,所以当它的相应方法被调用时,一个事务将被启动、挂起、被标记为只读,或者其它(根据该方法所配置的事务语义)。

读书人网 >软件架构设计

热点推荐