标签:
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会相对简单一些
标签:
原文地址:http://www.cnblogs.com/lvjun2015/p/5024253.html