增强(也叫通知)的配置语法: @通知注释("切点表达式")
名称 | 通知注释 | 说明 |
---|---|---|
前置通知 | @Before | 在目标方法之前执行 |
后置通知 | @AfterReturning | 在目标方法之后执行 |
环绕通知 | @Around | 在目标方法之前和之后都执行 |
异常抛出通知 | @AfterThrowing | 当目标方法出现异常后执行 |
最终通知 | @After | 无论目标方法执行是否有异常都会执行 |
具体操作:
第一步: 把com.huanf.anno目录的MyAspect类修改为如下
xxxxxxxxxx
//切面类,需要使用@Component注解把这个类的创建权交给spring容器。注意下面的通知也叫增强,增强也叫通知
"myAspect") (
//标注。告诉spring这个类是切面类
public class MyAspect {
value="execution(* com.huanf.anno.*.*(..))")//配置前置通知,需要在括号指定切点表达式,'value='可以省略不写 (
public void before_met(){
System.out.println("前置增强 -- 注解方式实现aop");
}
(value="execution(* com.huanf.anno.*.*(..))")//配置后置通知,需要在括号指定切点表达式,'value='可以省略不写
public void afterReturning_met(){System.out.println("后置增强 -- 注解方式实现aop");}
/*@Around(value="execution(* com.huanf.anno.*.*(..))")//配置环绕通知,需要在括号指定切点表达式,'value='可以省略不写
public Object around_met(ProceedingJoinPoint pjp) throws Throwable {//ProceedingJoinPoint表示正在执行的连接点,也就是切点,目的是为了下面能执行切点方法
System.out.println("环绕前增强 -- 注解方式实现aop");
Object proceed = pjp.proceed();//目标方法(也叫切点方法)
System.out.println("环绕后增强 -- 注解方式实现aop");
return proceed;
}*/ //注意环绕增强的效果 = 前置增强+后置增强。由于上面使用了前后置增强,所以这里的环绕增强我注释了,否则冲突报错
(value="execution(* com.huanf.anno.*.*(..))")//配置异常抛出通知,需要在括号指定切点表达式,'value='可以省略不写
public void afterThrowing_met(){
System.out.println("异常抛出后增强 -- 注解方式实现aop");
}
(value="execution(* com.huanf.anno.*.*(..))")//配置最终通知,需要在括号指定切点表达式,'value='可以省略不写
public void after_met(){
System.out.println("最终增强 -- 注解方式实现aop");
}
}
第二步: 在com.huanf.test目录的AnnoTest类运行测试