- 浏览: 202683 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
star_qiong:
ftl 入门 -
star_qiong:
ftl 入门 -
star_qiong:
[b ][/b]
ftl 入门 -
boaixiaohai:
markvery good
Hibernate的八大类HQL查询集合 -
carolli:
huangyunbin 写道但是我的项目中没有配置-vm C: ...
eclipse maven plugin 安装设置
九:Spring与Struts,Hibernate的集成
target :目标
proxy :代理
transaction :事务
propagation :传播
schema :样式
advisor :顾问
目标
9.1:Spring与Hibernate的集成
9.1.1:使用Spring简化Hibernate编码
9.1.2:配置数据源和SessionFactory
9.2:使用Spring重新组装Web程序
9.2.1:使用Spring管理依赖关系
9.2.2:与Struts集成
9.3:声明式事务
9.3.1:应用系统中的事务管理
9.3.2:1.x的方式
9.3.3:Spring2.0的方式
小结:
目标
掌握Srping与Struts,Hibernate的集成(简化DAO层代码),管理依赖关系和事务,会使用Spring实现声明式事务。
9.1:Spring与Hibernate的集成
9.1.1:使用Spring简化Hibernate编码
BaseHibernateDAO实现过接口FwxxDAO,此时可以:继承自org.springframework.orm.hibernate3.support.HibernateDaoSupport并implements这个接口。代码示例:super.getHibernateTemplate().update(fwxx);
Spring为HibernateDaoSupport类提供了setSessionFactory方法,以此向DAO类注入SessionFactory。
9.1.2:配置数据源和SessionFactory
在配置文件中,需要定义一个SessionFactory Bean才能注入到DAO类中。
一:使用Spring提供的LocalSessionFactoryBean,传入一个Hibernate配置文件的位置。在开发阶段,生成新的实体类时会自动添加在Hibernate配置文件中,不用手动修改Spring的配置文件。缺点是:无法有效的和DataSource进行集成,故,在部署到“生产机”是,需采用另一种配置方法(二)。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<propery name="configLocation"><value>classpath:hibernate.cfg.xml</value></property>
</bean>
二:配置<bean id="dataSource"></bean>和<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"></bean>
注入:
<bean id="fwxxDAO" class="com.apatech.jb.dao.hibimpl.FwxxDaoHibImpl" ><property name="sessionFactory" ref="sessionFactory"/></bean>
9.2:使用Spring重新组装Web程序
9.2.1:使用Spring管理依赖关系
程序的依赖关系是:Action-->Biz-->DAO-->SessionFactory-->DataSource。使用Spring管理这些依赖关系,注入的方向刚好相反。(ds-->sf-->dao-->biz-->action)。
1),去掉直接实例化FwxxDAO接口实例的代码(解除biz对dao的依赖,做到“面向接口”)。
2),增加fwxxDAO属性的setter方法,方便注入。
3),到Spring配置文件中定义fwxxBizBean.
9.2.2:与Struts集成
Action类的实例由Struts创建,由于要使用Spring管理Action对Biz的依赖,Action类就要由Spring来创建。Struts可以以插件的方式扩展,可利用Spring提供的ContextLoadPlugin插件即可做到Spring与Struts的无缝集成。
1),在Struts配置文件中配置插件,
2),将Struts配置文件中Action类别都配置为“org.springframework.web.struts.DelegatingActionProxy”
3),在Spring配置文件中配置FwxxAction,注意:<bean>没有id属性,name属性的值要与struts配置中相应Action Bean的path属性一致。
9.3:声明式事务
9.3.1:应用系统中的事务管理
事务处理:
1,JDBC方式:将Connection(JDBC中,事务依附在Connection对象上)对象以参数的方式传来传去。(Connection在业务逻辑层或者表示层出现,破坏了三层结构的基本原则)
2,将业务逻辑层代码放到Dao层实现,Dao层依据业务逻辑创建方法,编写复杂的业务逻辑处理代码。(降低了软件的质量——质量是软件的生命线)
要保证自己的代码逻辑清晰,规范易读,不要抱着侥幸的心理破坏规矩。事务是系统开发过程的一个“方面”,散布在系统里,可以通过AOP技术将其放在一起是实现。
9.3.2:1.x的方式(分布式事务的配置方法)
Spring声明式事务(在配置文件中完成):1,声明一个事务管理器,需要注入sessionFactory属性;2,给需要事务的方法添加事务支持(与AOP的实现相似),首先定义xxxTarget,然后定义xxxBiz,其中,1),class属性为org.springframework.transaction.intercepor.TransactionProxyFactoryBean,2),将事务管理器(transactionManager)和代理对象(target)注入;3)对事务属性(transactionAttributes)进行声明。
(相关概念:Spring AOP的实现采用代理的方式,首先要定义被代理的对象,然后注入到代理类中)
相关代码:
1:
<bean id="fwxxBizTarget" class="com.aptech.jb.biz.impl.FwxxBizImpl">
<property name="fwxxDao" ref="fwxxDAO"/>
</bean>
<!--2.1:-->
<bean id="fwxxBiz" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!--2.2:-->
<property name="transactionManager" ref="myHibTransactionManager"/>
<property name="target" ref="fwxxBizTarget"/>
<!--2.3:-->
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
解释:
事务属性的定义:<prop key="add*" >PROPAGATION_REQUIRED</prop>,key表示匹配方法的模式,可以使用'*'通配符,属性值有五个可选值,分别是:
propagation_required(传播_必需的):当前方法必须运行在一个事务环境中,如果一个现有事务正在运行中,该方法将运行在这个事务中,否则,就要开始一个新的事务;
propagation_mandatory(命令的; 强制的; 义务的):当前方法必须运行在一个事务上下文中,否则抛出异常;
propagation_never( 从不, 永不, 从来没有):当前方法不应该运行在一个事务中,否则就抛出异常;
propagation_requires_new:当前方法必须运行在自己的事务里;
propagation_supports:当前方法不需要事务处理环境,但如果有一个事务正在运行的话,这个方法也可以运行在这个事务里。
习惯:
业务逻辑层方法的事务属性设置为"propagation_required",若想提高效率,对不需要更改数据库数据的方法也可作如下配置:<prop key="*" >propagation_required,readonly</prop>,"*"表示匹配所有其他的方法,readOnly表示启用只读事务(数据库可以采取合理的优化措施避免不必要的操作)。
技巧(类似定义“基类”解决重复性编码的技巧):
定义“基类”,设置其abstract属性为true,表示不可以直接得到其实例,可以“继承”自这个基类,轻松定义多个业务逻辑Bean。(基类——abstract,子类中添加parent属性,并设置target属性)
9.3.3:Spring2.0的方式
对比1.x:1.x是一种“侵入式”的解决方案,只是没有侵入到程序代码中去而已(需要而外配置一个代理对象,原来的Bean的声明也要修改)。
优势:可以在配置代码不变的基础上给Bean的方法添加事务支持。
步骤:1,添2.0的Jar包(spring.jar,aspectjrt.jar,aspectjweaver.jar,cglib-nodep-2.1._3.jar);2,修改配置文件,增加常用命名空间的声明;重新启用项目,项目正常启动,表示项目中采用的Spring版本更新成功。
(直接添加Spring2.0的jar包河2.0风格的配置文件到项目即可)
2.0的配置:
1,通过<tx:advice>定义事务通知,需要指定一个事务管理器,然后在其属性中声明事务规则,含义与1.x类似。
2,定义切面(pointcut,即定义哪些方法应用这些规则)
<aop:pointcut id="bizMehtods" expression="execution(* com.appech.jb.biz.*.*(..))"/> 表示:在com.apetch.jb.biz包下所有的方法都应该应用事务规则。
3,将事务通知和切面组合
<aop:advisor advice-ref="txAdvice" pointcut-ref="bizMehtods"/>
成熟的三层架构+MVC的框架:Struts主持大局,Hibernate负责持久化工作,Spring管理组件间的依赖并提供事务支持,在稳定性和生产效率上具有极佳的平衡性。
小结:
Spring为Hibernate开发提供了良好的支持,可以大大简化Hibernate的编码。
在Spring配置文件定义dataSource,SessionFactory再注入到DAO中是开发中常用的做法。
Spring依赖注入在项目中用于管理程序间的依赖,使我们更容易做到面向接口编程。
Spring可以采用Struts插件的方式与Struts轻松集成。
Spring支持声明式事务,可以以不写一行程序代码的方式给系统增加事务支持。2.0的方式更为简洁,易懂。
target :目标
proxy :代理
transaction :事务
propagation :传播
schema :样式
advisor :顾问
目标
9.1:Spring与Hibernate的集成
9.1.1:使用Spring简化Hibernate编码
9.1.2:配置数据源和SessionFactory
9.2:使用Spring重新组装Web程序
9.2.1:使用Spring管理依赖关系
9.2.2:与Struts集成
9.3:声明式事务
9.3.1:应用系统中的事务管理
9.3.2:1.x的方式
9.3.3:Spring2.0的方式
小结:
目标
掌握Srping与Struts,Hibernate的集成(简化DAO层代码),管理依赖关系和事务,会使用Spring实现声明式事务。
9.1:Spring与Hibernate的集成
9.1.1:使用Spring简化Hibernate编码
BaseHibernateDAO实现过接口FwxxDAO,此时可以:继承自org.springframework.orm.hibernate3.support.HibernateDaoSupport并implements这个接口。代码示例:super.getHibernateTemplate().update(fwxx);
Spring为HibernateDaoSupport类提供了setSessionFactory方法,以此向DAO类注入SessionFactory。
9.1.2:配置数据源和SessionFactory
在配置文件中,需要定义一个SessionFactory Bean才能注入到DAO类中。
一:使用Spring提供的LocalSessionFactoryBean,传入一个Hibernate配置文件的位置。在开发阶段,生成新的实体类时会自动添加在Hibernate配置文件中,不用手动修改Spring的配置文件。缺点是:无法有效的和DataSource进行集成,故,在部署到“生产机”是,需采用另一种配置方法(二)。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<propery name="configLocation"><value>classpath:hibernate.cfg.xml</value></property>
</bean>
二:配置<bean id="dataSource"></bean>和<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"></bean>
注入:
<bean id="fwxxDAO" class="com.apatech.jb.dao.hibimpl.FwxxDaoHibImpl" ><property name="sessionFactory" ref="sessionFactory"/></bean>
9.2:使用Spring重新组装Web程序
9.2.1:使用Spring管理依赖关系
程序的依赖关系是:Action-->Biz-->DAO-->SessionFactory-->DataSource。使用Spring管理这些依赖关系,注入的方向刚好相反。(ds-->sf-->dao-->biz-->action)。
1),去掉直接实例化FwxxDAO接口实例的代码(解除biz对dao的依赖,做到“面向接口”)。
2),增加fwxxDAO属性的setter方法,方便注入。
3),到Spring配置文件中定义fwxxBizBean.
9.2.2:与Struts集成
Action类的实例由Struts创建,由于要使用Spring管理Action对Biz的依赖,Action类就要由Spring来创建。Struts可以以插件的方式扩展,可利用Spring提供的ContextLoadPlugin插件即可做到Spring与Struts的无缝集成。
1),在Struts配置文件中配置插件,
2),将Struts配置文件中Action类别都配置为“org.springframework.web.struts.DelegatingActionProxy”
3),在Spring配置文件中配置FwxxAction,注意:<bean>没有id属性,name属性的值要与struts配置中相应Action Bean的path属性一致。
9.3:声明式事务
9.3.1:应用系统中的事务管理
事务处理:
1,JDBC方式:将Connection(JDBC中,事务依附在Connection对象上)对象以参数的方式传来传去。(Connection在业务逻辑层或者表示层出现,破坏了三层结构的基本原则)
2,将业务逻辑层代码放到Dao层实现,Dao层依据业务逻辑创建方法,编写复杂的业务逻辑处理代码。(降低了软件的质量——质量是软件的生命线)
要保证自己的代码逻辑清晰,规范易读,不要抱着侥幸的心理破坏规矩。事务是系统开发过程的一个“方面”,散布在系统里,可以通过AOP技术将其放在一起是实现。
9.3.2:1.x的方式(分布式事务的配置方法)
Spring声明式事务(在配置文件中完成):1,声明一个事务管理器,需要注入sessionFactory属性;2,给需要事务的方法添加事务支持(与AOP的实现相似),首先定义xxxTarget,然后定义xxxBiz,其中,1),class属性为org.springframework.transaction.intercepor.TransactionProxyFactoryBean,2),将事务管理器(transactionManager)和代理对象(target)注入;3)对事务属性(transactionAttributes)进行声明。
(相关概念:Spring AOP的实现采用代理的方式,首先要定义被代理的对象,然后注入到代理类中)
相关代码:
1:
<bean id="fwxxBizTarget" class="com.aptech.jb.biz.impl.FwxxBizImpl">
<property name="fwxxDao" ref="fwxxDAO"/>
</bean>
<!--2.1:-->
<bean id="fwxxBiz" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!--2.2:-->
<property name="transactionManager" ref="myHibTransactionManager"/>
<property name="target" ref="fwxxBizTarget"/>
<!--2.3:-->
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
解释:
事务属性的定义:<prop key="add*" >PROPAGATION_REQUIRED</prop>,key表示匹配方法的模式,可以使用'*'通配符,属性值有五个可选值,分别是:
propagation_required(传播_必需的):当前方法必须运行在一个事务环境中,如果一个现有事务正在运行中,该方法将运行在这个事务中,否则,就要开始一个新的事务;
propagation_mandatory(命令的; 强制的; 义务的):当前方法必须运行在一个事务上下文中,否则抛出异常;
propagation_never( 从不, 永不, 从来没有):当前方法不应该运行在一个事务中,否则就抛出异常;
propagation_requires_new:当前方法必须运行在自己的事务里;
propagation_supports:当前方法不需要事务处理环境,但如果有一个事务正在运行的话,这个方法也可以运行在这个事务里。
习惯:
业务逻辑层方法的事务属性设置为"propagation_required",若想提高效率,对不需要更改数据库数据的方法也可作如下配置:<prop key="*" >propagation_required,readonly</prop>,"*"表示匹配所有其他的方法,readOnly表示启用只读事务(数据库可以采取合理的优化措施避免不必要的操作)。
技巧(类似定义“基类”解决重复性编码的技巧):
定义“基类”,设置其abstract属性为true,表示不可以直接得到其实例,可以“继承”自这个基类,轻松定义多个业务逻辑Bean。(基类——abstract,子类中添加parent属性,并设置target属性)
9.3.3:Spring2.0的方式
对比1.x:1.x是一种“侵入式”的解决方案,只是没有侵入到程序代码中去而已(需要而外配置一个代理对象,原来的Bean的声明也要修改)。
优势:可以在配置代码不变的基础上给Bean的方法添加事务支持。
步骤:1,添2.0的Jar包(spring.jar,aspectjrt.jar,aspectjweaver.jar,cglib-nodep-2.1._3.jar);2,修改配置文件,增加常用命名空间的声明;重新启用项目,项目正常启动,表示项目中采用的Spring版本更新成功。
(直接添加Spring2.0的jar包河2.0风格的配置文件到项目即可)
2.0的配置:
1,通过<tx:advice>定义事务通知,需要指定一个事务管理器,然后在其属性中声明事务规则,含义与1.x类似。
2,定义切面(pointcut,即定义哪些方法应用这些规则)
<aop:pointcut id="bizMehtods" expression="execution(* com.appech.jb.biz.*.*(..))"/> 表示:在com.apetch.jb.biz包下所有的方法都应该应用事务规则。
3,将事务通知和切面组合
<aop:advisor advice-ref="txAdvice" pointcut-ref="bizMehtods"/>
成熟的三层架构+MVC的框架:Struts主持大局,Hibernate负责持久化工作,Spring管理组件间的依赖并提供事务支持,在稳定性和生产效率上具有极佳的平衡性。
小结:
Spring为Hibernate开发提供了良好的支持,可以大大简化Hibernate的编码。
在Spring配置文件定义dataSource,SessionFactory再注入到DAO中是开发中常用的做法。
Spring依赖注入在项目中用于管理程序间的依赖,使我们更容易做到面向接口编程。
Spring可以采用Struts插件的方式与Struts轻松集成。
Spring支持声明式事务,可以以不写一行程序代码的方式给系统增加事务支持。2.0的方式更为简洁,易懂。
发表评论
-
关于Spring属性编辑器的使用(总结1):
2011-02-18 05:27 935关于Spring属性编辑器的使用(总结1): 当要给bean ... -
Spring属性编辑器
2011-02-18 05:25 14621. 自定义属性编辑器类editors.DatePropery ... -
Spring依赖注入相关操作
2011-02-18 05:24 1070Spring依赖注入相关操作: 1,如何给Eclipse配置 ... -
八:使用Spring容器管理对象
2011-02-18 05:23 3666八:使用Spring容器管理 ... -
五:使用Hibernate完成对象持久化
2011-02-18 05:19 1547五:使用Hibernate完成对象持久化 transient ... -
七--Criteria查询代码
2011-02-18 05:16 1080七--Criteria查询代码: public List s ... -
七:Hibernate查询
2011-02-18 05:15 1602七:Hibernate查询 query : ... -
六:Hibernate的关联映射
2011-02-18 05:14 1541六:Hibernate的关联映射 ... -
hibernate--出错记录
2011-02-18 05:13 1124hibernate--出错记录: 1,通过工具类初始化数据库 ... -
hibernate_操作(配置,BaseHibernateDao)
2011-02-18 05:12 2830hibernate_操作(配置,BaseHibernateDa ... -
Hibernate的八大类HQL查询集合
2011-02-18 05:11 40610Hibernate的八大类HQL查询集合: 一:属性查询(S ... -
关于struts1转换器和插件
2011-02-18 05:09 1064关于struts1转换器和插件 <controlle ... -
struts1.x的标签使用
2011-02-18 05:08 1084struts1.x的标签使用: 1.我们可以通过strut框 ... -
Struts1.x_all_main
2011-02-18 05:07 1004(Struts1.x版本的文本) Struts1.x的使用拓 ... -
struts1.x_i18n_Convert_Plugin
2011-02-18 05:06 1121struts1.x_i18n_Convert_Plugin ... -
struts2的部分笔记
2011-02-18 05:00 965struts2的部分笔记: 1, jdk是包含调试的,JRE ... -
SSH整合(低版本)
2011-02-18 04:31 1298SSH整合(低版本) 手动配置SSH 1. 添加Hiberna ...
相关推荐
本资源提供的"最新的S2SH整合:Spring4,Hibernate4,Struts2(源码)",旨在帮助开发者理解和实践这三大框架的集成与应用。 首先,Spring框架是Java企业级应用的核心组件,它提供了依赖注入(Dependency Injection, DI...
- Spring与Hibernate集成,通常使用Spring的HibernateTemplate或HibernateDaoSupport,提供事务管理和数据访问抽象,使得代码更简洁,事务控制更方便。 - Spring与Struts2集成,Spring可以作为Struts2的Action的...
【标题】中的“毕业设计&课设--大二J2EE课程设计 毕业设计选题系统(架构:spring+struts+hibernate)”指的是一个基于Java企业级应用平台(J2EE)的项目,这个项目是针对大二学生的毕业或课程设计任务。系统的核心...
C:\Struts,Hibernate,Spring集成开发宝典\Struts,Hibernate,Spring集成开发宝典光盘资料5.rar
本文将详细解析如何进行"Spring、Struts、Hibernate集成(干净版)",旨在为开发者提供一个清晰、简洁的集成步骤。 首先,让我们了解这三大框架的基本功能。Spring作为一个全能型框架,提供了依赖注入(DI)、面向...
标题中的"C:\Struts,Hibernate,Spring集成开发宝典\Struts,Hibernate,Spring集成开发宝典光盘资料7.rar"表明这是一个关于Struts、Hibernate和Spring三大Java EE框架集成开发的资源包,可能包含了教程、示例代码...
《图书管理系统spring+struts+hibernate》是一款基于Java技术栈开发的图书管理软件,其核心框架包括Spring、...对于学习和理解Java Web开发,特别是Spring、Struts和Hibernate的集成应用,这是一个很好的实践案例。
通过Action类和拦截器,可以实现与Spring的无缝集成,同时也可以利用Spring的缓存功能,将频繁访问的数据存储在Redis中。 3. **Hibernate框架**:Hibernate是Java领域的一个对象关系映射(ORM)框架,它简化了数据库...
标题中的"Spring集成struts以及hibernate jar包"指的是在Java Web开发中,将Spring框架与Struts2和Hibernate框架进行整合的过程。这通常是为了构建一个完整的MVC(Model-View-Controller)架构,其中Spring负责依赖...
Struts2是其后续版本,提供了更强大的拦截器机制,支持更多种视图技术,并且能与其他开源框架如Spring、Hibernate集成。 4. **Ajax**: AJAX(Asynchronous JavaScript and XML)是一种在不刷新整个网页的情况下...
Java EE是企业级应用开发的重要框架,而"精通Java EE项目案例-基于Eclipse Spring Struts Hibernate光盘源码"的资源提供了丰富的实践学习材料,旨在帮助开发者深入了解和掌握Java后端开发技术。这个项目案例涵盖了四...
Spring的核心特性包括依赖注入、面向切面编程(AOP)、事务管理等,它还有强大的数据访问支持,如Spring JDBC和Hibernate集成。 3. **Struts**:Struts是MVC(Model-View-Controller)设计模式的一个实现,主要用于...
SpringStrutsHibernate.zip是一个...总之,SpringStrutsHibernate.zip是一个学习和实践SSH框架集成的好材料。通过分析和运行其中的代码,你可以深入理解这三大框架的协同工作方式,从而提升你在JavaWeb开发领域的技能。
SSH集成是Java开发Web应用程序时常用的一种框架整合方式,它结合了Struts、Spring和Hibernate三个开源框架的优势,提供了一种高效、灵活且易于管理的解决方案。以下将详细阐述这三个框架以及它们集成后的主要特点和...
在光盘资料2的"springapp"子目录中,很可能包含了一个完整的Spring驱动的Struts和Hibernate集成示例应用。这个应用可能包括了配置文件(如struts-config.xml、hibernate.cfg.xml、applicationContext.xml等)、实体...
《Spring+Struts+Hibernate整合开发》是一本深入讲解企业级Java应用开发的书籍,它主要聚焦于三大著名开源框架——Spring、Struts和Hibernate的集成与应用。这些框架是Java Web开发中的基石,广泛应用于各种复杂的...
《Struts,Hibernate,Spring集成开发宝典》是一本深入探讨Java企业级应用开发的经典教程,专注于这三大框架的整合应用。Struts、Hibernate和Spring是Java开发中的三大支柱,它们各自负责不同的职责:Struts作为表现...
《Struts,Hibernate,Spring集成开发宝典》是一本深入探讨Java企业级应用开发的权威指南,主要聚焦于三大主流框架——Struts、Hibernate和Spring的整合应用。这本书的光盘资料10.rar包含了丰富的学习资源,对于想要...
- **Spring JDBC与Hibernate集成**:Spring可以管理Hibernate Session,提供事务控制,简化数据访问。 2. **Struts框架**: - **Action类**:处理HTTP请求的核心组件,每个Action对应一个业务逻辑。 - **...
本配置实例将探讨如何在Spring 3.1、Hibernate 4.2和Struts 2.3之间进行集成,以实现数据持久化、业务逻辑处理和前端展现的无缝对接。 首先,Spring框架作为核心容器,负责管理应用对象的生命周期和依赖关系。在...