第一步:编写通知类
package com.airplan.pojo; import org.aspectj.lang.ProceedingJoinPoint; public class Advice { public void mybefore(String name1,int age1){
System.out.println("前置"+name1 );
} public void mybefore1(String name1){
System.out.println("前置:"+name1);
} public void myaftering(){
System.out.println("后置 2");
} public void myafter(){
System.out.println("后置 1");
} public void mythrow(){
System.out.println("异常");
} public Object myarround(ProceedingJoinPoint p) throws Throwable{ System.out.println("执行环绕");
System.out.println("环绕-前置");
Object result = p.proceed();
System.out.println("环绕后置");
return result;
}
}
第二步配置
2 配置 spring 配置文件
2.1 <aop:after/> 后置通知,是否出现异常都执行
2.2 <aop:after-returing/> 后置通知,只有当切点正确执行时执行
2.3 <aop:after/> 和 <aop:after-returing/> 和<aop:after-throwing/>执行顺序和配置顺序有关
2.4 execution() 括号不能扩上 args
2.5 中间使用 and 不能使用&& 由 spring 把 and 解析成&&
2.6 args(名称) 名称自定义的.顺序和 demo1(参数,参数)对应
2.7 <aop:before/> arg-names=” 名 称 ” 名 称 来 源 于expression=”” 中 args(),名称必须一样
2.7.1 args() 有几个参数,arg-names 里面必须有几个参数
2.7.2 arg-names=”” 里面名称必须和通知方法参数名对应
<aop:config>
<aop:aspect ref="myadvice">
<!--
args(name1,age1):args中的参数必须与<aop:before />标签中arg-names的属性值一致
-->
<aop:pointcut expression="execution(* com.bjsxt.test.Demo.demo1(String,int)) and args(name1,age1)" id="mypoint"/> <aop:before method="mybefore" pointcut-ref="mypoint" arg-names="name1,age1"/> </aop:aspect>
</aop:config>
上面标蓝的部分一定要一致,并且要与通知方法的参数对应,连名称也要一样,虽然切点的参数名称不要求和args中的名称对应,但是数量要对应