目前的注解配置表达式的抽取,其实跟前面的xml配置表达式的抽取一样。抽取方式是在切面内定义方法,在该方法上使用@Pointcut注解来定义切点表达式, 然后在增强注解中进行引入
配置语法:@通知注释(value="抽取的表达式方法()") 或 @通知注释(value="本类名.抽取的表达式方法()") 我们在写的时候一般是省略value的,例如@通知注释("抽取的表达式方法()")
具体操作:
第一步: 把com.huanf.anno目录的MyAspect类修改为如下
xxxxxxxxxx
//切面类,需要使用@Component注解把这个类的创建权交给spring容器。注意下面的通知也叫增强,增强也叫通知
"myAspect") (
//标注。告诉spring这个类是切面类
public class MyAspect {
value="suibian_xxx()")//配置前置通知,需要在括号指定切点表达式,'value='可以省略不写 (
public void before_met(){
System.out.println("前置增强 -- 注解方式实现aop");
}
(value="suibian_xxx()")//配置后置通知,需要在括号指定切点表达式,'value='可以省略不写
public void afterReturning_met(){System.out.println("后置增强 -- 注解方式实现aop");}
/*@Around(value="suibian_xxx()")//配置环绕通知,需要在括号指定切点表达式,'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="MyAspect.suibian_xxx()") //这种写法也可以,不影响,注意MyAspect是本类的类名
public void afterThrowing_met(){
System.out.println("异常抛出后增强 -- 注解方式实现aop");
}
(value="MyAspect.suibian_xxx()") //这种写法也可以,不影响,注意MyAspect是本类的类名
public void after_met(){
System.out.println("最终增强 -- 注解方式实现aop");
}
//定义切点表达式,作用是切点表达式的抽取
("execution(* com.huanf.anno.*.*(..))")
public void suibian_xxx(){}
}
第二步: 在com.huanf.test目录的AnnoTest类运行测试