《基于新信息技术的Java-EE应用开发实训》课件第二章.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《基于新信息技术的Java-EE应用开发实训》课件第二章.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于新信息技术的Java-EE应用开发实训 基于 信息技术 Java EE 应用 开发 课件 第二
- 资源描述:
-
1、第2章Spring AOP2.1AOP基础2.2通知和切面第2章Spring AOP2.1AOP基础第2章Spring AOP2.1.1AOP概述如图2-1所示,AOP采用横向切割的方式,把横切逻辑,即和业务本身无关的逻辑独立出来,再根据需要把这些独立的模块织入到业务方法中。除了IoC容器,Spring Framework的另一个核心模块就是AOP框架。但是,Spring的IoC模块并不依赖于AOP,如果项目中不需要则完全可以不使用AOP模块。目前,市场上有很多种AOP框架,主流的只有以下三种开源的AOP框架。(1)AspectJ,5.0版本后与AspectWerkz合并。(2)JBoss A
2、OP,它是JBoss应用程序服务器项目的一个子项目。第2章Spring AOP(3)Spring AOP,它是Spring Framework的一部分。其中,AspectJ是Java社区里最完整、最流行的AOP框架。同时,Spring AOP也提供了另外一种完整的AOP实现,但它不是AspectJ的竞争者,它的目的是给Spring IoC容器提供一种一致性集成的AOP解决方案。Spring AOP的设计理念是:无论开发人员采用什么样的技术,Spring都会提供一个融合这些技术的平台,所以,尽管Spring本身的AOP不是很强大,但是Spring本身提供了对AspectJ的封装,以支持对Aspe
3、ctJ的使用。2.1.2 AOP常用术语AOP常用术语见下。(1)JoinPoint:连接点,在程序执行过程中某个特定的点。(2)PointCut:切入点,匹配连接点(JoinPoint);通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行。(3)Advice:通知,在切点的某个特定连接点上执行的动作,它定义了切面是什么、什么时候使用。第2章Spring AOP(4)Introduce:引入,可看作是一种特殊的通知,允许为已存在类添加新方法和属性。例如,可以创建一个稽查通知来记录对象的最后修改时间。只要用一个方法setLastModified(Date)以及一个保存这个状态的变量,即
4、可在不改变已存在类的情况下将状态引入,设置新的行为和状态。(5)Aspect:切面,由切入点和通知组成,它既包括了横切逻辑的定义,也包括了连接点的定义。(6)Target:目标对象,通知对象织入的目标对象,通常这个对象只需要关注业务逻辑操作,非业务的横切逻辑在通知中,AOP可以动态地把通知织入到这些目标中。(7)Weaving:织入,采用某种方式把通知添加到目标对象中的过程。图2-2展示了AOP的关键概念。第2章Spring AOP2.1.3 动态代理使用代理的目的是不希望客户直接访问原始对象,这样可以起到保护原始对象的作用,有时也可以屏蔽使用原始对象的细节。代理对象负责决定是否以及何时将方法
5、调用转发到原始对象上,此外,围绕着每个方法的调用,代理对象也可以执行一些额外任务。这样的例子在实际生活中有很多,比如服务器代理、防火墙代理、代理商等。代理模式是GOF23中经典模式之一,其基本思想是给某一对象提供代理对象,并由代理对象控制具体对象的引用。图2-3展示了代理设计模式的思路。第2章Spring AOP在Java里,实现代理设计模式有两种方法。一种是静态代理,另一种是动态代理。Spring AOP的核心实现技术是动态代理。在JDK1.3以后,Java提供了动态代理技术,允许开发人员在运行期间创建接口的代理实例。使用Java的代理类必须要求目标类和代理类实现一个共同的接口。JDK的动态
6、代理类使用java.lang.reflect包中的两个主要类:Proxy和InvocationHandler。其中,InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射的机制调用目标类代码,动态地把横切逻辑和业务逻辑编织在一起。Proxy则是利用InvocationHandler动态创建一个和目标类接口相同的实例,从而产生目标类的代理对象。举例说明,有一个电脑类接口,代码如下:public interface Computer /启动 void start();/停止 void stop();第2章Spring AOP /打印 void print();接口
7、中有三个方法,分别表示:启动、停止和打印。接下来,写一个简单的实现:public class PC implements Computer Override public void start()System.out.println(启动电脑.);Override第2章Spring AOP public void stop()System.out.println(停止电脑.);Override public void print()System.out.println(打印.);第2章Spring AOPComputerImpl做了一个简单的实现,提示每个方法正在进行的操作,现在需要给这个PC
8、类的每个方法添加一个横切的逻辑,希望在执行每个方法之后,打印出该方法运行的开始时间和结束时间。如果采用静态代理的方法,则需要另外写一个静态代理类PCStaticProxy,其代码如下:public class PCStaticProxy implements Computer /目标类 PC pc=new PC();Override public void start()System.out.println(new Date()+开始运行!);pc.start();System.out.println(new Date()+结束运行!);第2章Spring AOP Override publi
9、c void stop()System.out.println(new Date()+开始运行!);pc.stop();System.out.println(new Date()+结束运行!);Override public void print()System.out.println(new Date()+开始运行!);pc.print();第2章Spring AOP System.out.println(new Date()+结束运行!);PCStaticProxy是PC的静态代理类实现。PCStaticProxy中有一个pc属性,这个属性就是PCStaticProxy要代理的目标类,PC
10、StaticProxy所做的就是调用目标类的方法,同时把横切的代码织入其中,这样就完成了对PC类的静态代理。在客户端使用的时候,不再直接使用PC类,而是使用PC的代理类PCStaticProxy。由上面代码可以看出,使用静态代理类实现代码横切几乎要重写目标类代码,增加了大量的重复性工作,并且一旦横切代码需要改变,就会引起大量的代码改动,极不利于代码的维护,若使用动态代理则不会出现上述问题,下面来看看动态代理是如何实现的。使用动态代理类首先需要实现InvocationHandler接口。InvocationHandler接口表示如下:package java.lang.reflect;publi
11、c interface InvocationHandler public Object invoke(Object proxy,Method method,Object args)throws Throwable;第2章Spring AOP 接口中声明方法invoke(),在方法中控制整个调用过程。invoke()方法的第一个参数是最终产生的代理实例,第二个参数是表示被代理的目标实例的方法名,最后一个参数是表示被调用的目标方法的参数数组。事实上,可以将接口看成一个织入器,在invoke方法中,可以把需要织入的横切代码和目标代码编织在一起。本例中,创建一个PCHandler类实现接口Invoca
12、tionHandler:public class PCHandler implements InvocationHandler /代理类 Object target;public PCHandler(Object target)this.target=target;第2章Spring AOP Override public Object invoke(Object proxy,Method method,Object args)throws Throwable Object obj=null;System.out.println(method.getName()+于:+new Date()+开
展开阅读全文