Spring业务逻辑层技术(ppt 69页)
- 格式:ppt
- 大小:235.51 KB
- 文档页数:68
Spring核⼼技术详解⼀、Sring简介Spring是⼀个分层的Java SE/EE应⽤⼀站式的轻量级开源框架。
Spring核⼼是IOC和AOP。
Spring主要优点包括:⽅便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进⾏控制,避免硬编码造成的程序耦合度⾼。
AOP编程的⽀持,通过Spring提供的AOP功能,⽅便进⾏⾯向切⾯编程。
声明式事务的⽀持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式⽅式灵活地进⾏事务的管理,提⾼开发效率和质量。
⽅便程序的测试,可以⽤⾮容器依赖的编程⽅式进⾏⼏乎所有的测试⼯作。
⽅便集成各种优秀框架,Spring提供了对各种优秀框架的直接⽀持。
⼆、Spring体系结构如下图所⽰,整个spring框架按其所属功能可以划分为五个主要模块,这五个模块⼏乎为企业应⽤提供了所需的⼀切,从持久层、业务层到表现层都拥有相应的⽀持,这就是为什么称Spring是⼀站式框架的原因。
核⼼模块(Core Container) Spring的核⼼模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,⽤配置的⽅式进⾏依赖关系描述。
由IoC容器负责类的创建,管理,获取等。
BeanFactory接⼝是Spring框架的核⼼接⼝,实现了容器很多核⼼的功能。
Context模块构建于核⼼模块之上,扩展了BeanFactory的功能,包括国际化,资源加载,邮件服务,任务调度等多项功能。
ApplicationContext是Context模块的核⼼接⼝。
表达式语⾔(Expression Language)是统⼀表达式语⾔(EL)的⼀个扩展,⽀持设置和获取对象属性,调⽤对象⽅法,操作数组、集合等。
使⽤它可以很⽅便的通过表达式和Spring IoC容器进⾏交互。
AOP模块Spring AOP模块提供了满⾜AOP Alliance规范的实现,还整合了AspectJ这种AOP语⾔级的框架。
spring事务原理数据库系统内,事务指一系列连续的操作,这系列操作被看作一个整体,要么完全执行,要么完全不执行,不会出现执行部分的情况,这是数据库系统的基本特征之一。
在传统数据库系统中,事务的管理是由数据库系统自身提供的一种功能,然而随着数据库系统的复杂性的增加,数据库中的事务管理越来越复杂,对数据库操作有更多的要求,这样就催生了应用层事务管理技术,而当前最流行的事务管理技术是Spring事务。
Spring事务是一种基于AOP(面向切面编程)的分布式事务管理技术,它能够帮助系统更好的控制事务的处理过程,从而使系统内的数据更加有效率的共享,降低数据库事务的管理复杂度,提高数据库系统的可用性及性能。
Spring事务原理包括几个要素:事务模型、分布式事务处理框架、事务实现机制以及事务管理工具等。
一、事务模型Spring事务原理的核心是事务模型,即它把事务分为两种:提交成功事务和失败事务,在Spring提供的事务模型中,每个事务都只有两种结果,要么提交成功,要么提交失败,而不存在半提交的状态。
在Spring的事务模型中,事务的分类还要求事务的原子性,它要求一旦提交事务,事务就不会再次改变,或者改变的程度会很小。
原子性还表明事务的执行要么完全成功,要么完全失败,不会出现半成功半失败的情况。
二、分布式事务处理框架Spring提供了基于AOP技术的分布式事务处理框架,这种分布式事务处理框架能够有效地支持不同数据库之间的事务处理,它包括三个部分:事务管理器(TransactionManager)、事务拦截器(TransactionInterceptor)和事务事件监听器(TransactionListener)。
事务管理器是Spring对分布式事务的抽象,它可以处理不同类型的事务,它的实现通常会涉及到一些事务拦截器。
事务拦截器是Spring提供的一种安全机制,它能够在事务处理过程中,根据配置的规则,来拦截事务的执行,以便能够在事务处理过程中发现任何可能存在的问题,并对其进行调整,使得事务能够顺利的提交。
业务逻辑架构引言业务逻辑架构是在软件系统开发过程中起到关键作用的一种架构设计。
它定义了一个软件系统中的各种业务逻辑层次、功能模块、数据流向以及交互方式。
通过对系统的业务逻辑进行分析和抽象,可以帮助开发团队更好地理解系统的功能和需求,从而更加高效地开发和维护软件系统。
业务逻辑架构的概念业务逻辑架构是软件系统设计过程中的一种重要架构。
它将一个软件系统划分为多个不同的模块和层次,每个模块和层次负责处理特定的业务逻辑。
在业务逻辑架构中,各个模块和层次之间通过接口进行通信,以实现系统的整体功能。
业务逻辑架构的组成部分业务逻辑架构由多个不同的组成部分组成,每个组成部分负责处理不同的业务逻辑。
下面是业务逻辑架构的主要组成部分:1. 用户界面层用户界面层是系统与用户之间的接口。
它负责与用户进行交互,并将用户的请求传递给下一层进行处理。
用户界面层可以包括用户界面设计、用户输入验证以及与用户之间的消息传递等功能。
2. 应用逻辑层应用逻辑层是业务逻辑架构中的核心层次。
它负责处理系统的核心业务逻辑,实现系统的各种功能。
应用逻辑层可以包括业务逻辑的处理、数据流向的控制以及与其他层次之间的协调等功能。
3. 数据访问层数据访问层是负责与数据库进行交互的层次。
它封装了对数据库的访问操作,提供了对数据的增删改查等功能。
数据访问层可以包括数据库连接、数据查询和事务处理等功能。
4. 服务层服务层是负责提供系统的各种服务的层次。
它可以包括系统的安全验证、用户认证、权限控制以及与外部系统的交互等功能。
服务层可以通过接口的形式提供服务,供上层模块调用。
5. 外部系统接口外部系统接口是与外部系统进行交互的接口。
它可以包括与第三方系统的数据交换、消息传递以及远程调用等功能。
外部系统接口可以通过接口的形式提供给外部系统使用。
业务逻辑架构的设计原则在进行业务逻辑架构设计时,有一些重要的设计原则需要遵循,以确保系统的可靠性和可维护性。
下面是一些常用的业务逻辑架构设计原则:1. 单一职责原则每个模块和层次应该具有单一的职责,并且只负责处理特定的业务逻辑。
业务逻辑层业务逻辑层是应⽤程序的⼤脑:1. 负责处理系统的业务逻辑,2. 负责对⽤户定义的流程进⾏建模,3. 负责数据访问层和展⽰层的通讯,4. 负责将错误信息返回给展⽰层。
业务逻辑层,不能因为数据库的变换⽽变化,也不能因为终端的变换⽽变化。
业务逻辑层在此架构中包含IBLL,BLL,WFActivitys和WFDesigner四个项⽬。
1. BLL——业务逻辑业务逻辑的操作,包括业务处理,调⽤数据访问,事务等。
2. IBLL——业务接⼝业务逻辑层的⽅法对外暴露的接⼝和服务契约3. WFActivitys——⼯作流活动层定义了⼯作流中使⽤的活动4. WFDesigner——⼯作流设计器在此将⼯作流活动安装⼀定的业务规则组织在⼀起,设计⼯作流的业务流程接⼝View Codeusing System;using System.Collections.Generic;using System.Linq;using Common;using Langben.DAL;using System.ServiceModel;namespace Langben.IBLL{///<summary>///异常处理接⼝///</summary>[ServiceContract(Namespace = "")]public interface ISysExceptionBLL{///<summary>///查询的数据///</summary>///<param name="id">额外的参数</param>///<param name="page">页码</param>///<param name="rows">每页显⽰的⾏数</param>///<param name="order">排序字段</param>///<param name="sort">升序asc(默认)还是降序desc</param>///<param name="search">查询条件</param>///<param name="total">结果集的总数</param>///<returns>结果集</returns>[OperationContract]IQueryable<SysException> GetByParam(string id, int page, int rows, string order, string sort, string search, ref int total);///<summary>///获取所有///</summary>///<returns></returns>[OperationContract]System.Collections.Generic.List<SysException> GetAll();///<summary>///根据主键,查看详细信息///<param name="id">根据主键</param>///<returns></returns>[OperationContract]SysException GetById(string id);///<summary>///创建⼀个对象///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="entity">⼀个对象</param>///<returns></returns>[OperationContract]bool Create(ref Common.ValidationErrors validationErrors, DAL.SysException entity);///<summary>///创建对象集合///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="entitys">对象集合</param>///<returns></returns>[OperationContract]bool CreateCollection(ref Common.ValidationErrors validationErrors, System.Linq.IQueryable<DAL.SysException> entitys);///<summary>///删除⼀个对象///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="id">⼀条数据的主键</param>///<returns></returns>[OperationContract]bool Delete(ref Common.ValidationErrors validationErrors, string id);///<summary>///删除对象集合///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="deleteCollection">主键的集合</param>///<returns></returns>[OperationContract]bool DeleteCollection(ref Common.ValidationErrors validationErrors, string[] deleteCollection);///<summary>///编辑⼀个对象///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="entity">⼀个对象</param>///<returns></returns>[OperationContract]bool Edit(ref Common.ValidationErrors validationErrors, DAL.SysException entity);///<summary>///创建对象集合///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="entitys">对象集合</param>///<returns></returns>[OperationContract]bool EditCollection(ref Common.ValidationErrors validationErrors, System.Linq.IQueryable<DAL.SysException> entitys); }}实现View Codeusing System;using System.Collections.Generic;using System.Linq;using System.Transactions;using Langben.DAL;using Common;namespace Langben.BLL{///<summary>///异常处理///</summary>public class SysExceptionBLL : BaseBLL, Langben.IBLL.ISysExceptionBLL{///<summary>///私有的数据访问上下⽂protected SysEntities db;///<summary>///异常处理的数据库访问对象///</summary>SysExceptionRepository repository = null;///<summary>///构造函数,默认加载数据访问上下⽂///</summary>public SysExceptionBLL(){db = new SysEntities();repository = new SysExceptionRepository();}///<summary>///已有数据访问上下⽂的⽅法中调⽤///</summary>///<param name="entities">数据访问上下⽂</param>public SysExceptionBLL(SysEntities entities){db = entities;repository = new SysExceptionRepository();}///<summary>///查询的数据///</summary>///<param name="id">额外的参数</param>///<param name="page">页码</param>///<param name="rows">每页显⽰的⾏数</param>///<param name="order">排序字段</param>///<param name="sort">升序asc(默认)还是降序desc</param>///<param name="search">查询条件</param>///<param name="total">结果集的总数</param>///<returns>结果集</returns>public IQueryable<SysException> GetByParam(string id, int page, int rows, string order, string sort, string search, ref int total) {IQueryable<SysException> queryData = repository.DaoChuData(db, order, sort, search);total = queryData.Count();if (total > 0){if (page <= 1){queryData = queryData.Take(rows);}else{queryData = queryData.Skip((page - 1) * rows).Take(rows);}}return queryData;}///<summary>///创建⼀个异常处理///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="db">数据库上下⽂</param>///<param name="entity">⼀个异常处理</param>///<returns></returns>public bool Create(ref ValidationErrors validationErrors, SysException entity){try{return repository.Create(entity) == 1;}catch (Exception ex){validationErrors.Add(ex.Message);ExceptionsHander.WriteExceptions(ex);}return false;}///<summary>///创建异常处理集合///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="entitys">异常处理集合</param>///<returns></returns>public bool CreateCollection(ref ValidationErrors validationErrors, IQueryable<SysException> entitys){try{if (entitys != null)if (count == 1){return this.Create(ref validationErrors, entitys.FirstOrDefault());}else if (count > 1){using (TransactionScope transactionScope = new TransactionScope()){repository.Create(db, entitys);if (count == repository.Save(db)){plete();return true;}else{Transaction.Current.Rollback();}}}}}catch (Exception ex){validationErrors.Add(ex.Message);ExceptionsHander.WriteExceptions(ex);}return false;}///<summary>///删除⼀个异常处理///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="id">⼀异常处理的主键</param>///<returns></returns>public bool Delete(ref ValidationErrors validationErrors, string id){try{return repository.Delete(id) == 1;}catch (Exception ex){validationErrors.Add(ex.Message);ExceptionsHander.WriteExceptions(ex);}return false;}///<summary>///删除异常处理集合///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="deleteCollection">异常处理的集合</param>///<returns></returns>public bool DeleteCollection(ref ValidationErrors validationErrors, string[] deleteCollection) {try{if (deleteCollection != null){using (TransactionScope transactionScope = new TransactionScope()){repository.Delete(db, deleteCollection);if (deleteCollection.Length == repository.Save(db)){plete();return true;}else{Transaction.Current.Rollback();}}}}catch (Exception ex){validationErrors.Add(ex.Message);ExceptionsHander.WriteExceptions(ex);}return false;///创建异常处理集合///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="entitys">异常处理集合</param>///<returns></returns>public bool EditCollection(ref ValidationErrors validationErrors, IQueryable<SysException> entitys) {try{if (entitys != null){int count = entitys.Count();if (count == 1){return this.Edit(ref validationErrors, entitys.FirstOrDefault());}else if (count > 1){using (TransactionScope transactionScope = new TransactionScope()){repository.Edit(db, entitys);if (count == repository.Save(db)){plete();return true;}else{Transaction.Current.Rollback();}}}}}catch (Exception ex){validationErrors.Add(ex.Message);ExceptionsHander.WriteExceptions(ex);}return false;}///<summary>///编辑⼀个异常处理///</summary>///<param name="validationErrors">返回的错误信息</param>///<param name="entity">⼀个异常处理</param>///<returns></returns>public bool Edit(ref ValidationErrors validationErrors, SysException entity){try{repository.Edit(db, entity);return repository.Save(db) == 1;}catch (Exception ex){validationErrors.Add(ex.Message);ExceptionsHander.WriteExceptions(ex);}return false;}public List<SysException> GetAll(){return repository.GetAll(db).ToList();}///<summary>///根据主键获取⼀个异常处理///</summary>///<param name="id">异常处理的主键</param>///<returns>⼀个异常处理</returns>public SysException GetById(string id){return repository.GetById(db, id);}}}在业务逻辑层使⽤事务和处理异常信息,因为服务层和展⽰层都会调⽤,保证此层是业务的最⼩逻辑单元,所以在此层做事务和异常的处理,TransactionScope类是⼀个分布式事务类,ExceptionsHander类是处理异常的类。
spring底层原理
Spring是一个轻量级的框架,它的底层原理主要有三大部分:IOC、AOP以及MVC。
1. IOC(控制反转):IOC是指把对象的创建和管理交给Spring容器来管理,它能够解决对象的依赖关系,使得程序员不需要手动进行对象的创建和管理,而是将对象的创建和管理交给Spring来完成,从而降低了耦合度。
2. AOP(面向切面编程):AOP是指在程序中引入一些新的机制,它能够实现程序功能的增强,AOP是通过面向切面的编程思想,将业务逻辑和系统服务进行分离,从而减少系统的耦合度,并且能够提高系统的可维护性。
3. MVC(模型-视图-控制器):MVC是指模型-视图-控制器,它将业务逻辑、数据、界面显示分离开来,这样可以减少代码冗余,提高程序的可维护性。
1.Spring 架构图Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。
框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架。
Spring 框架的功能可以用在任何J2EE 服务器中,大多数功能也适用于不受管理的环境。
Spring 的核心要点是:支持不绑定到特定J2EE 服务的可重用业务和数据访问对象。
这样的对象可以在不同J2EE 环境(Web或EJB )、独立应用程序、测试环境之间重用。
组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
每个模块的功能如下:•核心容器:核心容器提供Spring 框架的基本功能。
核心容器的主要组件是BeanFactory ,它是工厂模式的实现。
BeanFactory 使用控制反转(IOC )模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
•Spring 上下文:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。
Spring 上下文包括企业服务,例如JNDI 、EJB 、电子邮件、国际化、校验和调度功能。
•Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring 框架中。
所以,可以很容易地使Spring 框架管理的任何对象支持AOP 。
Spring AOP 模块为基于Spring 的应用程序中的对象提供了事务管理服务。
通过使用Spring AOP ,不用依赖EJB 组件,就可以将声明性事务管理集成到应用程序中。
•Spring DAO :JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
Spring DAO 的面向JDBC 的异常遵从通用的DAO 异常层次结构。
JAVA三层架构JAVA的三层架构是一种常用的软件设计模式,将软件系统分为三个不同的层次:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer),每一层都有不同的职责和功能,使系统更加模块化和可维护。
表示层是用户与系统交互的入口,负责接收用户输入,并将结果展示给用户。
常见的表示层技术有JavaServer Pages(JSP)、JavaServer Faces(JSF)、Spring MVC等。
表示层主要关注用户界面的设计和展示,在这一层,我们可以实现用户输入的验证和转发请求到业务逻辑层。
业务逻辑层是整个系统的核心,负责处理应用程序的业务逻辑。
这一层主要关注业务规则的定义和执行,是系统的处理中心。
业务逻辑层通常涉及以下几个方面的功能:数据验证、授权、事务控制和业务逻辑的实现。
业务逻辑层可以通过POJO(Plain Old Java Objects)或者领域模型对象实现,它们包含了业务规则的定义和执行逻辑。
数据访问层负责与数据库交互,包括数据的读写、存取等。
在该层中,我们可以采用数据访问对象(DAO)模式,通过DAO接口和实现类对数据库进行增删改查的操作。
数据访问层可以使用JDBC(Java Database Connectivity)或者ORM(Object-Relational Mapping)框架,如Hibernate、MyBatis等。
通过数据访问层,我们可以将业务逻辑层与具体的数据库操作解耦,使得系统更加灵活和可扩展。
三层架构的主要优点有:1.模块化:每一层都有独立的职责和功能,易于理解和维护。
当需要更改其中一层时,只需修改该层的代码,不会对其他层产生影响。
2.可扩展性:系统的每一层都可以独立进行扩展,不会对其他层造成影响。
例如,如果需要更换底层数据库,只需修改数据访问层的实现。
3.可测试性:每一层都可以进行单元测试,保证代码的质量和功能的正确性。