Spring AOP详解_免费下载

Spring AOP详解_免费下载

ID:42583267

大小:106.50 KB

页数:6页

时间:2019-09-18

Spring AOP详解_免费下载_第1页
Spring AOP详解_免费下载_第2页
Spring AOP详解_免费下载_第3页
Spring AOP详解_免费下载_第4页
Spring AOP详解_免费下载_第5页
资源描述:

《Spring AOP详解_免费下载》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、AOP(AspectOrientedProgramming),即面向切面编程。1、OOP回顾在介绍AOP之前先来回顾一下大家都比较熟悉的OOP(ObjectOrientedProgramming)。OOP主要是为了实现编程的重用性、灵活性和扩展性。它的几个特征分别是继承、封装、多态和抽象。OOP重点体现在编程架构,强调的是类之间的层次关系。2、OOP缺陷为了更好的说明OOP的概念,我们接下来讲一个OOP的实例,重点分析OOP存在哪些缺陷,以便更好的理解AOP的相关内容。先看如下的一张图:上面这张图有三个类:Dog,Cat和Duc

2、k,他们都有一个方法run。按照OOP的设计理念,我们很容易就会想到抽象出一个Animal父类,同时让这三个子类继承Animal父类。这样的设计可以用如下的图示表示:在OOP思想中,我们会使用大量的类似上图的编程方式,对类进行抽象、继承、封装和多态来实现编程的重用性、灵活性和扩展性。但是这样的编程仍然有一定的局限性,有时候,OOP并不能很好解决我们再实际开发中遇到的问题。为了说明这个问题,看下面的图示:看到上面的图,我们暂时还不能发现有什么问题。为了大家便于理解,接下来我来给大家讲解一下上面类图的实现过程。描述如下:马戏团有一条

3、表演的小狗,这条小狗可以跑和跳,但是它完成跑和跳两个动作之前必须是在接到驯兽师发出的命令后,同时完成跑和跳的动作之后,驯兽师会给与响应的奖励,比如一块肉。了解了实现过程之后,我们在来看一下具体的代码。copy1publicclassDog{2publicvoidrun(){3System.out.println("驯兽师发出命令!")4System.out.println("小狗开始跑!");5System.out.pringln("驯兽师给与奖励");6}7publicvoidjump(){8System.out.printl

4、n("驯兽师发出命令!")9System.out.println("小狗开始跳!");10System.out.pringln("驯兽师给与奖励");11}12}仔细看上面的代码,我们可以看出在run方法和jump方法中,存在一些相同的内容(驯兽师发出命令和给与奖励),这些内容并不能完全进行抽象,即不能按照OOP编程思想进行处理。类似这样的情况同样会出现在我们编程中的很多地方,例如:日志记录、性能统计、安全控制、事务处理、异常处理等等。但是这样的情况该如何解决呢?这就引入了AOP编程思想。3、AOP简介AOP为AspectOri

5、entedProgramming的缩写,即面向切面编程(也叫面向方面),是一种可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。4、AOP实现实例为了大家更好的理解AOP如何实现,接下来我们优化一下上述代码。首先是Dog类copy1publicinterfaceAnimal{2publicvoidrun();3publicvoidjump();4}56publicclassDogimplementsAnimal{7publicvoidrun(){8System.out.println(

6、"小狗开始跑!");9}10publicvoidjump(){11System.out.println("小狗开始跳!");12}13}对比之前的代码我们可以明显看出,我们将关于驯兽师的相关内容从run和jump中进行了抽取,接下来,我们如何在程序运行中将关于驯兽师的动作加入到程序中呢?这就是我们这次用到的AOP实现的核心技术动态代理(DynamicProxy)。具体代码如下:14importjava.lang.reflect.InvocationHandler;15importjava.lang.reflect.Method;

7、16importjava.lang.reflect.Proxy;1718publicclassMyProxyimplementsInvocationHandler{1920privateObjecttargetObject;2122/**23*绑定委托对象并返回一个代理类1*@paramtarget2*@return3*/4publicObjectcreateProxyInstance(ObjecttargetObject){5this.targetObject=targetObject;6returnProxy.newProx

8、yInstance(targetObject.getClass().getClassLoader(),7targetObject.getClass().getInterfaces(),8this);9}1011/**12*@paramproxy:指被代理的对象。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。