Java

AOP

面向切面编程,预编译方式和运行时动态代理实现在不修改源码情况下给程序动态统一添加功能

  • 代理模式,建立在spring抽象事务管理之上的声明性事务管理
  • 支持用户自定义的切面
  • 业务逻辑分离,低耦合

核心:横切关注点的分离和织入
场景:日志记录,性能统计,安全控制,事务处理
其他几个重要概念

  • 切面
  • 切入点
  • 切点表达式

Aspect

通过一个 简单示例 引入对Aspect的学习
环绕通知=前置通知+目标方法执行proceed()+后置通知

PointCut

  • @within和@target:类注解
  • @annotation:方法注解
  • execution():execution( modifier-pattern?/*修饰符*/ ret-type-pattern/*返回类型*/ declaring-type-pattern?/*方法模式*/ name-pattern(param-pattern)/*参数模式*/ throws-pattern?/*异常模式*/ )
/*1、第一个*号:表示返回类型,*号表示所有
  2、包名:表示需要拦截的包名,后面..表示当前包和当前包的所有子包: impl包、子孙包下所有类的方法
  3、第二个*号:表示类名,*号表示所有
  4、*(..):最后这个星号表示方法名,*号表示所有,括弧里面表示方法参数,..表示任何参数 */
@pointcut("execution(* com.sample.service.impl..*.*(..))")

JoinPoint

Object[] getArgs //返回目标方法的参数
Signature getSignature //返回目标方法的签名
Object getTarget //返回被织入增强处理的目标对象
Object getThis //返回AOP框架为目标对象生成的代理对象
原文地址:https://www.cnblogs.com/wjcx-sqh/p/12305986.html