AOP允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。应用只实现业务逻辑即可,并不负责其它的系统级关注点。
AOP的应用场景
日志记录、跟踪、监控与优化,性能统计、优化、安全、权限控制,应用系统的异常捕捉及处理,事务处理,缓存,持久化,懒加载,内容传递,调试,资源池,同步。
AOP种类
静态AOP
- Aspect形式,通过特定的编辑器,将实现后的Aspect编译并织入到系统的静态类中。
动态AOP
- AOP的织入过程在系统运行开始之后进行,而不是预先编译到系统中。
AOP的实现方法
静态:利用代理实现AOP功能
-
代理工厂实现InvocationHandler接口
-
新建学生代理方法返回Proxy.newProxyInstance方法 (入参为 目标对象的类加载器, 目标对象的实现接口, 代理类本身)
-
重写invoke方法
-
包装目标对象并返回对应的代理类对象
调用
利用接口实例化目标对象
实例化代理工厂
新建学生代理 方法入参为目标对象
在invoke方法中可以在method.invoke中织入对应的逻辑实现AOP
动态:利用CGLib实现AOP功能
CGLib代理工厂中实现MethodInterception接口
- 在创建对象方法当中引入enhancer
- 设置enhancer的父级class为目标对象
- 设置回调 入参为当前对象
- 返回enhancer.create
- 重写intercept方法
- 实例化object对象
在intercept方法中织入对应的逻辑实现AOP
调用
通过强转直接实例化CGLib代理工厂中创建的对象
直接利用aspect注解
在conf-aspect.xml配置注解对象
网友评论