即面向切面编程 在oop的基础上横切 加入一些非核心代码
切面类使用步骤如下
- 定义 方法 存储增强代码 具体定义几个 由插入位置决定
- 使用注解配置 指定插入 目标方法的位置
* 前置 @Before
* 返回 @AfterReturning
* 异常 @AfterThrowing
* 后置 @After
* 环绕 @Around - 配置切点表达式 【选中插入的方法 切点 指明切入哪里】
- 补全注解
* 加入 ioc 容器 @Component
* 配置切面 @Aspect =切点 + 增强的部分 - 开启 @Aspect 注解 的支持 在配置类加入注解
//四.配置切面
@Aspect
@Component
@Order(10) //设置切面优先级 数越小 优先级越高
public class LogAdvice {
// 二.使用注解配置 指定插入 目标方法的位置 (前置增强)
@Before("execution(* com..impl.*.*(..))") //三.配置切点表达式 (声明在哪些方法中生效)
//一.定义方法
public void before(JoinPoint joinPoint) {
System.out.println("开始了");
/*
joinPoint.getSignature().getName();获取方法名
int modifiers = joinPoint.getSignature().getModifiers();访问修饰符
Modifier.toString(modifiers); 访问修饰符 数字转字符串
joinPoint.getTarget().getClass().getSimpleName(); 获得对象 -->类对象 --> 简单类名
joinPoint.getArgs(); 参数列表
*/
}
//后置增强
@AfterReturning(value = "execution(* com..impl.*.*(..))",returning ="result") //返回的结果
// 如果想要 获得 返回结果
// 1.在方法中 加参数 (Object result) 接收返回结果
// 2.在注解中加入returning 属性( returning ="result" 指定用那个形参 来接收 返回结果)
public void returnResult(Object result) {
}
//最后增强
@After("execution(* com..impl.*.*(..))")
public void after() {
System.out.println("结束了");
}
//异常增强
@AfterThrowing(value = "execution(* com..impl.*.*(..))",throwing = "throwable") //异常信息
public void err(Throwable throwable) {
System.out.println("出错了");
}
}