《Spring与服务层》PPT课件.ppt

上传人:赵** 文档编号:64009393 上传时间:2022-11-27 格式:PPT 页数:53 大小:1.43MB
返回 下载 相关 举报
《Spring与服务层》PPT课件.ppt_第1页
第1页 / 共53页
《Spring与服务层》PPT课件.ppt_第2页
第2页 / 共53页
点击查看更多>>
资源描述

《《Spring与服务层》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《Spring与服务层》PPT课件.ppt(53页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Spring框架高级开发工程师培训框架高级开发工程师培训中程在线(北京)科技有限公司内部教程注意保密第5章 Spring与服务层学习内容学习内容什么是服务层Sprng的事务管理什么是服务层什么是服务层?初学者对于服务层究竟干了什么,是否有必要设计一个服务层出来等问题不理解。服务层是系统的核心业务处理层,负责接收表示层的指令和数据,根据业务逻辑的需要调用相应的持久层,并将结果返回给表示层。如图5.1所示初学者对于服务层的疑问?初学者对于服务层的疑问?服务层是由一些负责处理业务功能Bean构成的。很多初学者对业务功能Bean提出了如下问题:业务功能Bean如何划分?业务功能Bean方法如何设计?业

2、务功能业务功能BeanBean如何划分?如何划分?有一个网上商城的用例图5.2。这样业务功能可以分成五个模块,按照五个模块你可以设计出五个业务功能Bean。业务功能业务功能BeanBean方法如何设计?方法如何设计?关于这些业务功能Bean中有哪些方法。这些Bean中的方法应该按照业务功能划分的。我们在需求分析的时候对用户的功能进一步细化,就可以得到若干个业务方法了。例如:我们可以对用户登录的功能细化到图5.3所示细化的用例图。这样这个Bean就可以有两个业务方法:登录注销和登录注册。小结小结在处理业务的方法的时候不要简单的认为业务方法中一定有复杂的业务逻辑,而只有一行代码方法不属于业务逻辑,

3、这种看法是错的。业务方法中的业务逻辑与代码多少是没有关系的。实际上,把持久化代码从业务服务层剥离到持久层以后,服务层已经不是那么臃肿,代码量会大大减少的。在能够满足用户需求的情况下,代码越少当然是好事,我们为什么要害怕呢?!还有另外一个极端有些初学者把业务逻辑处理不是放到服务层而是放到了Web层,这也是不对的。例如:我们登录验证处理代码我们应该放在一个服务层的Bean中,而不是放在Web层的JSP或Servlet中,Web层应用遵守轻薄的原则服务层的例子服务层的例子为用户登录的功能模块进行添加服务层。功能描述:当用户登录的时候,我们需检查用户的合法性,如果是合法用户,而且登录标志是1(没有人登

4、录),则可以登录,并且设值登录标志为0(已经登录),即同一时间段一个用户帐号不能被多人使用登录系统。当用户注销的时候,我们将用户的登录标志设值为1,即代表没有人使用这个帐号登录。0 代表已经登录1 代表没有登录。数据库中的表是t_user设计如图5.4所示。业务领域对象User设计如图5.5所示。User.hbm.xmlUser.hbm.xml映射文件映射文件UserLoginImpl.javaUserLoginImpl.java完整的服务层代码完整的服务层代码applicationContext.xmlapplicationContext.xml配置文件配置文件依赖关系图依赖关系图 JUni

5、tJUnit测试,运行结果错误!测试,运行结果错误!原因原因经过分析得知Hibernate的Session已经关闭,惰性加载初始化异常。由于在Spring中我们使用了HibernateTemplate,所有Session的管理是由Spring的框架管理了。我们无法根据需要关闭或打开Session,所以惰性加载应该设定为关闭(lazy=”false”),将User.hbm.xml映射文件设值为lazy=”false”就可以了修改之后的User.hbm.xml映射文件如清单如5.4所示。小结小结综上所述,业务服务层的业务功能Bean一般情况下是按照业务功能模块划分的,业务功能Bean里面的方法是业

6、务功能模块的细化。这只是一般的原则,不是绝对不变的,希望大家灵活掌握。Spring的事务管理什么是事务什么是事务?在整个一个登录业务流程中,与数据库有关的有5个步骤,如果第4步的时候失败了,第5步就没有意义了。它们的特点“要么全部成功,要么全部回滚”。这就是事务的原子性。大部分初学者在学习数据库的时候,经常提到事物的概念,在学习数据库时候事务一般被介绍为一组SQL操作的集合。在学习数据库时候这样理解没有问题。但是开发应用系统的时候,应该站在整个业务流程的角度来理解事务,一个完整的事务应该是一个完整的业务流程,这样理解应该更准确一些,因为应用系统所说的事务除了数据库中的事务还包括消息事务等等。而

7、且在业务流程的描述中提到SQL语句是不合适的。J2EEJ2EE中事务中事务 局部事务和分布式事务。局部事务局部事务局部事务由数据库管理的事务,JDBC通过Connection实现的,采用了HibernateORM技术是通过Session实现事务的管理,但是只能处理一个数据库的事务。分布式事务分布式事务分布式事务,对数据库的操作可以跨多个不同的数据库的,例如:在商场刷卡消费,我们的银行帐户(中国银行数据库),由于消费了100元,就要在我们的银行帐户中扣除“消费金额”100元,再把这个“消费金额”100元累计到商场(商场帐号在工商银行数据库)“应收金额”上的时候,这两个数据库不同的不可能用一个Co

8、nnection管理事务。这种情况就是“分布事务”,“分布事务”的管理要使用J2EE的JTA技术了。JTA可以管理分布式事务,还有分布式事务不仅包括数据库的事务还有消息服务等,都属于事务的范畴。小结小结在应用程序中应该从业务流程的角度看待事务是很重要的,这关系到我们编程的时候,将事务处理放到持久层(DAO)中还是放到服务层中。很多人认为受局部事务的影响认为事务处理理所当然放到持久层(DAO),这种观点我认为是有问题的。不是说从技术角度持久层(DAO)不能有事务处理,而是从我们讲的四层框架来说,构建应用系统时候,应该将事务处理放到服务层。因为,服务层关注业务逻辑,而事务处理也是一个完整的业务流程

9、。在服务层中一个公有的业务方法就是一个完整的业务流程。事务的边界一般情况下是从这种方法的开始到方法的结束。如何在服务层处理事务?如何在服务层处理事务?编程型事程型事务声明型事声明型事务编程型事务编程型事务编程型事务就是在程序中自己编写事务处理代码Spring提供了编程事务的支持,它主要有两种方式:直接使用PlatformTransactionManager接口;使用TransactionTemplate模板类。使用使用PlatformTransactionManagerPlatformTransactionManager接口接口声明型事务声明型事务编程型事务的管理代码分散到业务功能Bean中难

10、于维护和管理。编写的代码可读性差。声明型事务解决了这些问题,它将事务处理的代码从业务功能Bean中分离出来,使业务功能Bean中没任何与事务处理有关的代码。我们在配置文件中定义事务的规则和行为,当业务方法被调用的时候由框架读取配置文件,根据配置文件定义的事务行为来管理事务。在图5.10所示的是一个声明型事务示意图,原本是【表示层对象】【服务层接口】【服务层实现】【DAO接口】这样的一个调用关系,现在在服务层添加了一个“事务代理对象”,变成了【表示层对象】【服务层接口】【事务代理对象】【服务层实现】【DAO接口】这样的一个调用关系。这个“事务代理对象”是Spring 框架实现声明型事务的核心。“

11、事务代理对象”不需要我们自己编写这个对象。Spring提供这个对象,我们只需要在配置文件中配置好这个对象即可,并指定它要管理的对象。修改为声明型事务,依赖关系图修改为声明型事务,依赖关系图在配置文件中我们添加一个Bean的id属性为userLoginServiceProxy对象,这个Bean是org.springframework.transaction.interceptor.TransactionProxyFactoryBean类型,TransactionProxyFactoryBean是Spring提供的一个“事务代理对象”。它有三个属性要求配置分别是:transactionManage

12、r,属性是配置事务管理器,我们这里事务管理器是Hibernate3的HibernateTransactionManager对象。target,属性是配置“事务代理对象”要管理的目标对象即业务功能Bean,我们这里是UserLoginImpl3对象。transactionAttributes,属性是最麻烦的一个属性了,这个属性用来定义事务的事务的规则和行为。PROPAGATION_REQUIRED中key是指定要管理的方法,这里采用通配符方式。中配置的内容如图5.12所示。传播类型,定义了事务处理边界,Spring有多种事务传播方式,PROPAGATION_MANDATORY,PROPAGATI

13、ON_NESTED,PROPAGATION_NEVER,PROPAGATION_NOT_SUPPORTED,PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW和PROPAGATION_SUPPORTS,PROPAGATION_REQUIRED是指当前方法必须放到一个事务里,如果当前有一个事务在运行则加入进来,如果没有事务则开始一个新的事务。PROPAGATION_REQUIRES_NEW是指当前方法必须在一个事务里,如果当前有一个事务正在运行,则挂起这个运行事务,开始一个新事务。其它的转播方法我们就不再介绍大家如果有需要可以自己查查Spring API。

14、隔离级别,主要考虑并发访问题。ISOLATION_DEFAULT,ISOLATION_READ_UNCOMMITTED,ISOLATION_READ_COMMITTED,ISOLATION_REPEATABLE_READ,ISOLATION_SERIALIZABLE。每一项内容大家可以查看Spring API。是否为只读事务,使用这个一选项,事务管理器会尽可能的利用使用数据库的优化特性。回滚规则,通过这一项可以设定当出现异常的时候,是回滚事务还是提交事务,-Exception代表出现异常事务回滚,+Exception代表出现异常事务提交。服务层声明型事务代码服务层声明型事务代码总结总结综上所述,在程序清单5.11中我们看不到任何与事务处理有关的代码。可见声明型事务可以给我们带来很多好处。把繁琐困难的事务管理工作交给框架来管理,使程序员将精力集中在业务处理上面。而且,声明型事务还可以方便修改事务的规则和行为,因为这些规则和行为是写在配置文件中的,修改文件既可,不像编程型事务要修改代码。声明型事务早期出现在EJB中,这一优秀的设计思想影响着今天的很多框架。所以如果我们没有什么特殊的理由,我们都应该在我们的应用系统中使用声明型事务。学员实践学员实践

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com