1. 新建类,不用实现
1.1 类中方法名任意java
public class MyAdvice { 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; }
1.2 配置spring 配置文件
1.2.1 <aop:after/> 后置通知,是否出现异常都执行
1.2.2 <aop:after-returing/> 后置通知,只有当切点正确执行时
执行
1.2.3 <aop:after/> 和<aop:after-returing/> 和
<aop:after-throwing/>执行顺序和配置顺序有关
1.2.4 execution() 括号不能扩上args
1.2.5 中间使用and 不能使用&& 由spring 把and 解析成&&
1.2.6 args(名称) 名称自定义的.顺序和demo1(参数,参数)对应
1.2.7 <aop:before/> arg-names=” 名称” 名称来源于
expression=”” 中args(),名称必须同样
1.2.7.1 args() 有几个参数,arg-names 里面必须有几个参数spring
1.2.7.2 arg-names=”” 里面名称必须和通知方法参数名对应express
<aop:config> <aop:aspect ref="myadvice"> <aop:pointcut expression="execution(* com.bjsxt.test.Demo.demo1(String,int)) and args(name1,age1)" id="mypoint"/> <aop:pointcut expression="execution(* com.bjsxt.test.Demo.demo1(String)) and args(name1)" id="mypoint1"/> <aop:before method="mybefore" pointcut-ref="mypoint" arg-names="name1,age1"/> <aop:before method="mybefore1" pointcut-ref="mypoint1" arg-names="name1"/> <!-- <aop:after method="myafter" pointcut-ref="mypoint"/> <aop:after-returning method="myaftering" pointcut-ref="mypoint"/> <aop:after-throwing method="mythrow" pointcut-ref="mypoint"/> <aop:around method="myarround" pointcut-ref="mypoint"/>--> </aop:aspect> </aop:config>