1、在spring-mvc.xml配置文件中打开切面开关:spring's aspect auto-proxying uses @Aspectj annonatiins as a guild for creating proxy-based aspects.Under the covers, it's still Spring's proxy-based aspects, means you are still limited to proxy method invocations.
<aop:aspectj-autoproxy proxy-target-class="true"/>
注意:proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。如果proxy-target-class 属性值被设置为true,那么基于类的代理将起作用(这时需要cglib库)。如果proxy-target-class属值被设置为false或者这个属性被省略,那么标准的JDK 基于接口的代理将起作用。即使你未声明 proxy-target-class="true" ,但运行类没有继承接口,spring也会自动使用CGLIB代理。高版本spring自动根据运行类选择 JDK 或 CGLIB 代理。
2、定义拦截哪些操作类型:比如增加、修改、删除
3、定义拦截操作的切面实现类:
说明:
1.@aspect:表明是切面类
2.@Pointcut(value = "execution (* com.cms.admin.web.controller.*.*(..))"):定义统一拦截的切入点,其中第一个*表示任意返回类型,第二个*表示任意类名,假如第二个*前面是两个.则表示包括包里面的子包,第三个*表示任意方法名,后面的小括号表示任意参数值
3.//@Before("controllerAspect()"):表示拦截方法执行前的动作
4.@Around("controllerAspect()"):表示方法执行前后的动作,注意要有返回值
5.@AfterReturning(value = "controllerAspect()", returning = "rtv",argNames="rtv"):表示拦截方法执行完成之后的动作,pointcut/value:这两个属性的作用是一样的,它们都属于指定切入点对应的切入表达式。一样既可以是已有的切入点,也可直接定义切入点表达式。当指定了pointcut属性值后,value属性值将会被覆盖。returning:该属性指定一个形参名,用于表示Advice方法中可定义与此同名的形参,该形参可用于访问目标方法的返回值。除此之外,在Advice方法中定义该形参(代表目标方法的返回值)时指定的类型,会限制目标方法必须返回指定类型的值或没有返回值。注意:虽然AfterReturning增强处理可以访问到方法的返回值,但它不可以改变目标方法的返回值
6.@AfterThrowing("controllerAspect() && args(ex)"):表示捕捉方法执行异常的动作,加上args(ex) 中间是AfterThrowing方法参数的名字。
7.advice(切面) define what and when of aspects, pointcuts(切入点) define where, a pointcut define matches one or more join points(连接点) at which advice should be woven.advice contains before,after,after returning,after throwing,around(before,after)。