AOP思想

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配置注解对象

你可能感兴趣的:(AOP思想)