码迷,mamicode.com
首页 > 其他好文 > 详细

3、AOP

时间:2015-12-06 21:08:29      阅读:346      评论:0      收藏:0      [点我收藏+]

标签:

3.1、静态代理

当需要为一些成熟的项目增加日志时,需要修改到原有代码,此时可以为原有的对象创建一个静态代理类,在这个代理类中实现相应的日志或者权限控制操作

技术分享

使用静态代理带来的最大问题,需要为每一个类都加入相应的控制代码,这些代码其实是和业务逻辑没有关系的。

3.2、动态代理

动态代理可以将一些横切性的问题(日志管理,权限控制)提取出来成为一个模块,之后在运行的时候根据需要切入到原有正常代码中。

步骤:

1、 创建动态代理类

创建一个类实现InvocationHandler接口。以后创建对象就完全通过这个代理类来进行创建

2、在代理类创建相应的要代理的对象

技术分享

3、创建一个静态的newInstance方法来创建代理对象

技术分享

4、创建了代理对象之后,这个代理对象在执行任何方法时都会先执行invoke方法,就可以在这个方法中加入控制信息

技术分享

5 、根据以上步骤之后,日志管理就被提取成为一个独立的模块,在运行时进行加入

6、由于使用的newInstance这个static的方法注入对象,所以无法使用Annotation需要使用xml的配置文件

技术分享

7、此时可以考虑为相应的方法增加Annotation来增强相应的操作

3.3、使用Spring实现 AOP

Spring就是使用动态代理来实现AOP的

Annotation

1、使用Annotation实现

   1.1、在xml中打开aop的自动检索

技术分享

  1.2、创建一个需要实现动态代理的类

技术分享

  1.3、导入aspect包,spring使用的是AspectJ这个包来实现AOP,所以需要导入这个包

技术分享

  1.4、在这个类上面使用@Aspect来声明这个类是一个切面类

技术分享

  1.5、在相应的要进行操作横切点上面加入PointCut的说明

技术分享

1.6、如果希望获取相应的调用信息,可以通过JoinPoint这个参数进行传递

技术分享

1.7、其他知识

技术分享

xml

使用annotation需要在大量的joinpoint上加入execution,感觉不是很方便,使用xml会相对简单一些

技术分享

3、AOP

标签:

原文地址:http://www.cnblogs.com/lvjun2015/p/5024253.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!