第十讲Spring的AOP课件_第1页
第十讲Spring的AOP课件_第2页
第十讲Spring的AOP课件_第3页
第十讲Spring的AOP课件_第4页
第十讲Spring的AOP课件_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

讲使用SpringAOP第10东华大学计算机学院丁祥武二0一0年十月的讲使用SpringAOP第10东华大学计算机学院丁祥武二02本讲内容从企业应用的思考如何应对挑战常用设计模式与动态代理面向方面编程(AOP)Spring2.x对AOP的支持2本讲内容从企业应用的思考23从企业应用的思考企业应用开发面临的挑战企业应用的开发是相当复杂的,这种复杂除了表现在技术方面外,还表现在行业本身。企业级应用的开发往往需要面对更多的问题

—大量的并发访问

—复杂的环境

—网络的不稳定

—还有外部的Crack行为等因此企业级应用必须提供更好的多线程的支持,具备良好的适应性及良好的安全性等。

3从企业应用的思考企业应用开发面临的挑战34从企业应用的思考思考的方面可扩展性、可伸缩性一个积极的软件开发者应该正确对待需求的变更。需求的变更表明有市场前景,只有有变化的产品才是有市场的产品。优秀的企业级应用必须具备良好的可扩展性和可伸缩性。因为良好的可扩展性允许系统动态增加新功能,而不会影响原有的功能。良好的可扩展性建立在高度的解耦之上。在JEE应用中,大多采用XML文件作为配置文件。使用XML配置文件可以避免修改代码,从而能极好地提高程序的解耦。

4从企业应用的思考思考的方面45从企业应用的思考思考的方面快捷、可控的开发如果没有时间限制,任何一个软件系统在理论上都是可实现的。但这样的条件不存在,软件系统必须要及时投放市场。对于企业级应用,时间的限制则更加严格。企业的信息是瞬息万变的,与之对应的系统必须能与时俱进。因而采用新技术的问题,乐于与风险。因此快捷、可控是企业信息化系统必须面对的挑战。5从企业应用的思考思考的方面56从企业应用的思考思考的方面稳定性、高效性企业级应用的一个显著特点:并发访问量大,访问频繁。因此稳定性、高效性是企业级信息化系统必须达到的要求。企业级应用必须有优秀的性能,如采用缓冲池的技术——保存那些创建开销大的对象(典型的应用是数据连接池)、数据缓存。6从企业应用的思考思考的方面67从企业应用的思考思考的方面花费最小化,利益最大化—永恒的话题任何一个商业组织都希望尽可能地降低开销。对开发者而言,降低开销主要是如何使在开发上的投资更有保值效果。即开发的软件系统具有很好的复用性。在良好的JEE架构设计中,复用是一个永恒的追求目标。架构设计师希望系统中大部分的组件可以复用,甚至能让系统的整个层可以复用。对于采用DAO模式的系统架构,如果数据库不发生大的改变,整个DAO层都不需要变化。7从企业应用的思考思考的方面78本讲内容从企业应用的思考如何应对挑战常用设计模式与动态代理面向方面编程(AOP)Spring2.x对AOP的支持8本讲内容从企业应用的思考89从企业应用的思考如何应对挑战使用建模工具建模工具不一定是ROSE等,可以是简单的手画草图。当然,借助于专业的建模工具可以更好地确定系统模型。任何语言的描述都是很空洞,而且具有很大的歧义性。使用图形则更加直观,而且意义更加明确。关于建模工具,推荐采用统一建模语言:UML。但UML的使用也需要掌握分寸。在软件开发人员内部使用时,尽可能使用规范的UML;但用于与行业专家沟通时,要辅助文字说明。9从企业应用的思考如何应对挑战910从企业应用的思考如何应对挑战利用优秀的框架使用框架可以大大提高系统的开发效率。除非开发一个非常小的系统,而且是开发后无须修改的系统,才可以完全抛弃框架。好处:1.提高生产效率2.具有更稳定、更优秀的性能如果不使用已有的框架,系统开发者将面临着需要自己完成所有的底层部分。除非开发者丝毫不遵守软件复用的原则,总是重复书写相同代码。3.更好的保值性10从企业应用的思考如何应对挑战1011从企业应用的思考如何应对挑战选择性地扩展软件的需求千变万化,任何框架不可能总是那么完美,难免需要扩展现有的框架。对已有的框架进行扩展,则可最大限度地利用已有的框架,但是不要盲目扩展现有框架,因为新增的部分有时会引入新的风险。尽量利用已有组件,除非无法使用已有框架时,才考虑选择性地扩展。11从企业应用的思考如何应对挑战1112从企业应用的思考如何应对挑战使用代码生成器使用代码生成器可以自动生成部分程序。12从企业应用的思考如何应对挑战1213本讲内容从企业应用的思考如何应对挑战常用设计模式与动态代理面向方面编程(AOP)Spring2.x对AOP的支持13本讲内容从企业应用的思考1314从企业应用的思考常用的设计模式及应用单态模式的使用在任何不需要重复生成Java实例的场景中,都应该考虑使用单态模式。使用单态模式可以保证系统无须生成多个Java实例,从而减少内存占用率,也降低JVM(Java虚拟机)进行垃圾回收的开销。单态模式通常有如下两个使用场景:

1.工厂模式中的工厂(工厂不要重复生产产品)。2.使用服务定位器模式时的服务定位器(尽量找)。14从企业应用的思考常用的设计模式及应用1415从企业应用的思考常用的设计模式及应用代理模式的使用传统的代理模式主要用于用简单对象来代替复杂的对象,如果创建一个对象所需的时间比较长,且计算资源相当昂贵,可以采用一个相对简单的对象来代替它。代理模式可将创建过程推迟到真正需要该对象时完成,一旦整个对象创建成功,对代理的方法调用将变成对实际对象的方法调用。15从企业应用的思考常用的设计模式及应用1516从企业应用的思考常用的设计模式及应用代理模式的使用JavaEE中的代理模式通常是采用功能更强大的对象来代替目标对象。例如,对于普通的业务逻辑组件,其方法都应该有事务性,但这种开始事务和结束事务都是通用步骤。因此原始业务逻辑对象的方法可以无须事务操作,而是由系统生成动态代理,调用实际的目标方法并负责事务操作。16从企业应用的思考常用的设计模式及应用1617从企业应用的思考对象由工厂产生。工厂作为代理处理器,对产生的对象增加事务处理代码或安全处理代码。主要是对对象中的方法增加事务处理代码。可以在处理器中硬编码,对方法增加代码。通用的代理处理器,该处理器并不需要与任何特定的目标对象耦合。为了该代理处理器有更好的适应性,系统可以将需要增加事务操作的方法以XML文件配置,而该代理处理器负责解析XML文档,根据配置决定对哪个方法增加事务处理。17从企业应用的思考对象由工厂产生。1718从企业应用的思考动态代理在运行时,能够动态实现指定接口的机制,从而生成新的类。动态代理是JDK1.3引入的。开发者需要借助于java.lang.reflect.Proxy类来启用代理。为某对象创建代理后,所有对被代理对象的请求都经过代理的处理,即代理拦截了客户的请求。为创建动态代理,开发者需要借助Proxy提供的newProxyInstance()方法,并将定义代理类的类装载器、代理实现的接口集合、InvocationHandle传入这一静态方法。18从企业应用的思考动态代理1819本讲内容从企业应用的思考如何应对挑战常用设计模式与动态代理面向方面编程(AOP)Spring2.x对AOP的支持19本讲内容从企业应用的思考1920AOP概述AOP(AspectOrientedProgramming)的背景知识为满足整个企业应用某方面的需求,开发者(架构师)需要整理出系统的关注点,如下图形象地描述了关注点。20AOP概述AOP(AspectOrientedPro2021比如:事务管理、安全性管理、应用的业务逻辑都是应用需要重点解决的问题。被作为关注点看待。整个系统由大量的关注点构成。21比如:2122AOP概述关注点分类大体而言,关注点分为两类:核心关注点主要关注系统的业务逻辑;横切关注点主要关注系统级的服务,供业务逻辑使用。关注点核心关注点横切关注点22AOP概述关注点分类关注点核心关注点横切关注点2223AOP概述现实状态业务逻辑中,到处都涉及横切关注点。因此对各个已经实现的模块(业务逻辑)而言,都有大量的横切关注点实现。新的方案业务逻辑用OO技术实现;横切关注点用AOP技术实现;横切关注点是系统级服务,对大部分应用是常见的,容易抽象出来,并加以实现。23AOP概述现实状态2324AOP概述实现AOP的总体模式OO技术将应用中的核心关注点分解成由层次(继承)结构组成的领域对象集合。AOP将应用中的横切关注点分解成由切面(Aspect)组成的生态子系统。它们被分别实现,互为补充,使得应用的开发变得简单、可维护性得到增强。24AOP概述实现AOP的总体模式2425AOP概述实现AOP的总体模式为实现单个横切关注点,开发者需要采用若干切面满足它。比如为实现安全性控制横切关注点,开发者需要提供用户论证切面、用户授权切面。25AOP概述实现AOP的总体模式2526AOP的基本概念各种AOP实现切面的技术、框架、机制、手段可能不同,但是AOP技术的基本概念是相同的。包括以下7个术语:连接点(joinpoint)切入点(cutpoint)装备(advice)引入(introduction)目标对象(targetobject)织入(weaving)和切面(Aspect)。26AOP的基本概念各种AOP实现切面的技术、框架、机制、手2627AOP的基本概念连接点(Joinpoint)连接点指应用(目标对象)执行的某个点,如执行到某个方法、访问到某个成员变量、抛出某异常、装载某个类。通常用连接点的强弱来衡量AOP实现的强弱。Aspect5实现的连接点类型非常多,SpringAOP仅支持方法级连接点。27AOP的基本概念连接点(Joinpoint)2728AOP概念切入点(pointcut)通过切入点能够声明、集结连接点。通常装备与切入点关联在一起,一旦某连接点被触发,则会立即执行相应的装备。开发者借助于pointcut表达语言来完成pointcut的指定工作。28AOP概念切入点(pointcut)2829AOP概念装备(Advice)装备指切面(aspect)在特定连接点所采取的动作。特定连接点由切入点(pointcut)指定。主要的装备类型包括:Before、AfterReturning、AfterThrowing、After、Around。Before装备能够在特定连接点被触发前执行,如方法执行前执行的装备。其它类似。29AOP概念装备(Advice)2930AOP概念引入(introducion)引入也称为inter-type声明(AspectJ5)。将新的接口、方法、成员变量动态引入到目标类、接口或切面中。目标对象(targetObject)被若干切面(aspect)装配过的对象,也被称为被装备的对象。30AOP概念引入(introducion)3031AOP概念织入(weaving)将切面(Aspect)与目标对象组装在一起的过程称为织入。通过织入创建一个被装备的对象。织入时机有编译期、装载期、运行期。不同的AOP实现支持不同织入时机。如SpringAOP支持运行期织入;AspectJ5支持编译期和类装载期(Load-Time)织入。31AOP概念织入(weaving)3132AOP概念切面(aspect)与OOP中对象的概念一样,是AOP中的核心概念。切面将pointcut、装备、引入、目标对象等信息集结在一起,从而定义相应的织入规则,这样一个整体称为切面(aspect)。32AOP概念切面(aspect)3233Spring对AOP的支持AOP是一种流行的编程模型;AOP的编程思想与OOP不同,是对OOP的一种强有力的补充;通过AOP,能更好地实现模块化结构,或者能动态地为系统增加新功能而不影响原系统的结构.33Spring对AOP的支持AOP是一种流行的编程模型;3334SpringAOP概述AOP允许开发者动态地修改OOP定义的静态模型,即不用修改原来的OO模型,甚至可以不修改OO代码本身,即可完成对横切面问题的解决。比如,将系统中处理日志、安全性、事务及其他企业级服务集中放置在一个地方。因此AOP使得OOP中的重复代码能够大范围减少。34SpringAOP概述3435Spring框架介绍Spring就是一个实现了AOP功能的IOC容器Spring2.0内核(IoC容器)SpringAOPSpringDAOSpringORMSpringWebSpringWebMVCSpringContextSpring框架包含的7个主要模块35Spring框架介绍Spring就是一个实现了AOP功能3536SpringAOPSpingAOP基于IoC,是对OOP的有益补充.SpingAOP将应用系统分为两部分,核心业务逻辑及横向的通用逻辑,即方面(Aspect)。比如大型应用中涉及的持久化管理、事务管理、安全管理、日志管理和调试管理。使用AOP可以将处理Aspect的代码注入主程序,AOP可以防止代码混乱。36SpringAOPSpingAOP基于IoC,是对3637Spring对AOP的支持Spring的AOP模块实现了AOP联盟定义的AOP接口的实现;利用Spring提供的AOP,可以简化代码逻辑,分离应用程序的关注点;Spring提供的许多低层服务(如对声明式事务的管理的支持)是基于AOP实现的;与其它AOP框架不同,Spring的思想仍然建立在IoC之上,即AOP本身也是以Bean的方式在Spring的IoC容器中装配起来的。37Spring对AOP的支持Spring的AOP模块实现了3738Spring的设计思想Spring的设计思想工厂模式和更好的singleton(单例)解决方案使用工厂模式创建对象比用new更加容易,因为工厂向客户端隐藏了创建对象的复杂细节;可以使用Spring提供的工厂类,也可以自己编写工厂类并纳入容器统一管理。单一实例的对象,其生命周期贯穿整个应用程序。如采用singleton模式,必须为每个单实例实现复杂的singleton模式;Spring实现了更容易的管理方法,将单实例纳入Spring的IoC容器,由IoC容器保证对象的单实例38Spring的设计思想Spring的设计思想3839SpringAOP的基本概念Spring使用动态代理实现AOP技术。39SpringAOP的基本概念Spring使用动态代理实39实例—HibernateDaoSupport类DAO(如UserDAO)通常继承HibernateDaoSupport类这样的DAO具有Spring封装Hibernate操作数据库的完全功能(自动生成基本CURD操作的代码)。继承的目的是让Spring管理事务并且使DAO具有面向接口编程的特点而且在Spring的管理下,数据库连接的打开和关闭,事务的处理也都变成自动化了。40实例—HibernateDaoSupport类DAO(如Us40实例—HibernateDaoSupport类HibernateDaoSupport提供了基于AOP的自动事务处理,程序员完全可以不用理会事务的开始与提交。在使用JDBC的一个Connection对象中使用一个事务时,在Hibernate中对应的事务要关联一个SessionFactory。然而这个SessionFactory却没有在DAO中体现。41实例—HibernateDaoSupport类Hibern41实例—HibernateDaoSupport类原因是HibernateDaoSupport类做了封装,它用一个setSessionFactory方法将SessionFactory进行注入。42实例—HibernateDaoSupport类原因是Hibe42实例—HibernateDaoSupport类所以继承自HibernateDaoSupport类的DAO都会具有SessionFactory的属性,从而可以通过SessionFactory创建Session实例操作数据库。43实例—HibernateDaoSupport类4343实例—HibernateDaoSupport类虽然有set方法,但在哪注入的呢?当然是IoC容器根据applicationContext.xml注入。…….

<beanid="userDAO"class="com.dao.impl.UserDAOImpl"><propertyname="sessionFactory"><reflocal="sessionFactory"/></property></bean>44实例—HibernateDaoSupport类虽然有set方44实例—HibernateDaoSupport类IoC容器自动将创建的DAO注入了sessionFactory的对象,所以DAO对象就具有了通过Hibernate操作数据库的功能。45实例—HibernateDaoSupport类IoC容器自动45实例—HibernateDaoSupport类另外,要使用hibernate的模板必须继承HibernateDaoSupport这个类。46实例—HibernateDaoSupport类另外,要使用h46结束语

终实验报告格式47结束语终474748AOP概念装备的类型Before装备即在执行目标操作(如调用某方法、读取或设置变量取值)之前执行的装备。48AOP概念装备的类型4849AOP概念实例在某项目中提供了test.DisPersonInfo1.java类,暴露了两个compute()方法。49AOP概念实例4950publicclassDisPersonInfo1{privatestaticfinalLoglog=LogFactory.getLog(DisPersonInfo1.class);publicstaticvoidcompute(Stringperson){

log.info(person);}publicstaticvoidcompute(Stringperson,intage){

log.info(person+"已经"+age+"岁了!");}}50publicclassDisPersonInfo15051publicclassMainTest{privatestaticfinalLoglog=LogFactory.getLog(MainTest.class);publicstaticvoidmain(String[]args){

log.info("MainTestmain()………");DisPersonInfo1.compute("Picart");DisPersonInfo1.compute("Picart",30);}}

51publicclassMainTest{51522008-10-2022:01:43MainTestmain信息:MainTestmain()………2008-10-2022:01:43DisPersonInfo1compute信息:Picart2008-10-2022:01:43DisPersonInfo1compute信息:Picart已经30岁了!522008-10-2022:01:43MainTest5253//一个AspectJ5切面实现AspectJAop.aj(可以是.java)publicaspectAspectJAop{privatestaticfinalLoglog=LogFactory.getLog(AspectJAop.class);pointcutxx():execution(*DisPersonIpute(..));before:xx(){(“AspectJAop@Before”);}}53//一个AspectJ5切面实现AspectJAop.5354关于该切面实现AspectJ5的切入点pointcut也是bean对象。通过pointcut关键字定义了名为xx()的pointcut;xx()pointcut通过关键字execution集结了相应的连接点(joinpoint),即执行Di

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论