3、AOP

3.1、静态代理

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

Image(58)

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

3.2、动态代理

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

步骤:

1、 创建动态代理类

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

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

Image(59)

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

Image(60)

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

Image(61)

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

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

Image(62)

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

3.3、使用Spring实现 AOP

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

Annotation

1、使用Annotation实现

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

Image(63)

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

Image(64)

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

Image(65)

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

Image(66)

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

Image(67)

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

Image(68)

1.7、其他知识

Image(69)

xml

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

Image(70)

posted @ 2015-12-06 20:04  拉风的风吹哥  阅读(119)  评论(0编辑  收藏  举报