您的位置:首页 > 运维架构

3、AOP

2015-12-06 20:04 274 查看
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会相对简单一些



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: