首页 > 代码库 > Struts、Hibernate和Spring的整合
Struts、Hibernate和Spring的整合
Spring整合Hibernate
Spring以其开放性,能与大部分ORM框架良好的整合.这样Spring就能轻松地使用ORM。
Spring提供了DAO支持,DA0组件是应用的持久层访问的重要组件,我们把主要精力集中在数据的管理口上。
此外,Spring还提供了一致的异常抽象,不需要在编码时显示的捕获各种特定的异常。
通过Bibernate进行数据持久层操作时,Hibernate的Session接口提供了基本的数据访问方法,获得Hibernate Session对象方法是要实现Hibernate的SessionFactory接口,SessionFactory接口极为重要,它是单个数据库映射关系编译后的内存镜像,负责打开、关闭和管理Session。Hibernate访问时,需要手动创建SessionFactory实例,这是繁琐的工作,我们希望能以声明式的方式管理SessionFactory实例。Spring的loc容器提供了这种方式,通过配置文件的配置管理SessionFactory实例,使用Spring管理Session对象,使用Spring实现声明式的事务管理。
下面是Spring对Hibernate的整合时的关键步骤。
1、在Spring的配置文件ApplicationContext.xml中配置Hibernate对SessionFactory的设置。如下面的示例代码。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 配置hibernate的其他的属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 配置Hibernate的映射文件 -->
<property name="mappingResources">
<list>
<value>cn/itcast/shop/user/vo/User.hbm.xml</value>
</list>
</property>
</bean>
当Spring的IoC容器配置了SessionFactory Bean,它随应用的部署启动而加载,可以利用Spring依赖注入特性将该Bean注入其它Bean。我们由配置文件还可以看出,以声明式的方式管理SessionFactory时,可以让应用在不同数据源间切换,一旦持久层服务发生改变,程序代码不需要改动,只需修改配置文件即可,使得系统的可维护性加强。
2、使用Spring中的HibernateDaosupport和HibernateTemplate类简化Hibernate DAO实现类的编写,完成数据持久化的操作。
3、通过Spring的事务机制进行统一的事务管理。Spring可以采用编程式和声明式两类事务管理。声明式的事务管理更灵活。可以在Spring中使用注解式的声明式事务管理:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 注解事务驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
Spring整合Struts2
Spring也提供了MVC模式的支持,但Struts是比较单纯的MVC框架,开发中更倾向Spring和Struts整合开发。
Struts和Spring的整合比较简单顺畅。整合关键点是:将Struts中的Action的实例生成不再由Struts负责,而交给Spring容器管理,主要目的是让控制器与业务逻辑组件实现分离。基于该目的,我们采用工厂模式策略,让Spring容器管理Action,利用IoC的依赖注入特性为控制器注入业务逻辑组件。Struts只单纯扮演控制器的角色。
下面是Spring和Struts整合的关键步骤。
Struts的核心控制器必须能装载Spring的应用程序环境。
Spring和Struts整合有两种方式
1、Struts2的Action由Struts2框架自身创建.
2、Struts2的Action交给Spring框架创建.
我们推荐使用第二种方式,因为第二种方式,Action类由Spring容器进行管理,可以方便的对Action类进行AOP的编程.但第二种有一个关键地方:就是在Struts2框架创建Action类的时候,默认是多例的.而Spring容器在管理类的时候,默认创建是单例的.单例的这种方式就容易产生线程安全问题.所以一定要配置类的scope属性.
在Spring的配置文件中:
<bean id="userAction" class="cn.itcast.shop.user.action.UserAction" scope="prototype">
</bean>
在Struts的配置文件中:
<action name="user_*" class="userAction" method="{1}">
</action>
Struts2、Hibernate和Spring的整合开发
将两组整合放在一起进行开发,就可以进行三者的组合开发。在进行三者整合开发时,一般可以采取由上往下和由下往上的分层开发的原则,多数实际项目开发,往往采用后者的开发模式,即:
(1)从底层开发,先开发领域对象,即一些实体类,这些领域对象会在各层之间进行传递,利用Hibernate做好领域对象和数据库表的映射关系。
(2)DAO层的开发。它是专门独立出来对数据进行持久化,即处理数据的CRUD操作,也是利用Spring对Hibernate提供的DAO支持类HibernateDaoSupport来实现的。每个DAO组件对应一个数据库表。
(3)Service层的开发。这层主要是具体业务组件开发,主要用于处理各类业务逻辑,并且能隔离事务和对其他资源调度。
(4)Action层开发。主要是处理Web请求,由Spring进行管理。
Struts、Hibernate和Spring的整合