Spring Aop 细节详解

来源:互联网 发布:java内部类初始化 编辑:程序博客网 时间:2024/06/06 05:08

Spring Aop 细节详解

@Aspect 注解方法执行

package com.atguigu.spring.aop.impl;import java.util.Arrays;import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.stereotype.Component;@Component@Aspectpublic class LoggingAspect {/** * joinPoint 包含了代理中的所有方法名和参数名 */@Before(value = "execution(public int com.atguigu.spring.struts2.inter.AuthodCaluer.add(int, int))")public void beforeMethod(JoinPoint joinPoint) {String methods = joinPoint.getSignature().getName();Object args[] = joinPoint.getArgs();System.out.println("原方法中的方法名称是:"+methods);System.out.println("原方法中的参数是:"+Arrays.asList(args));System.out.println("The Method begins with methods");}/** * 方法执行完成,无论怎么样都会执行的通知 */@After(value = "execution(public int com.atguigu.spring.struts2.inter.AuthodCaluerLogImpl.mul(int, int))")public void afterMethod() {System.out.println("The Method ends");}/** * 当方法有返回值就会执行,可获取返回值 */@AfterReturning(value = "execution(public int com.atguigu.spring.struts2.inter.AuthodCaluerLogImpl.mul(int, int))",returning="result")public int afterReturning(Object result) {System.out.println("result = "+result);System.out.println("The Method ends");return 0;}/** * 当方法有异常抛出执行,可以定位异常 */@AfterThrowing(value = "execution(public int com.atguigu.spring.struts2.inter.AuthodCaluerLogImpl.div(int, int))",throwing="ex")public void afterThrowing(Exception ex) {System.out.println("异常为 : "+ex);System.out.println("The Method has execption");}}

切面执行优先级以及定义pointCut

package com.atguigu.spring.aop.impl;import java.util.Arrays;import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;/** * 切面的执行优先级,只越小,优先级越高 */@Order(1)@Component@Aspectpublic class ValateAspect {/** * 定义切面,达到方法复用,在定义切面的execution的时候,只需要引入 包.类.方法() 即可瞬间定义execution */@Pointcut(value="execution(public int com.atguigu.spring.struts2.inter.AuthodCaluer.add(int, int))")public void pointCutAspect(){}/** * joinPoint 包含了代理中的所有方法名和参数名 */@Before(value = "com.atguigu.spring.aop.impl.LoggingAspect.pointCutAspect()")public void beforeMethod(JoinPoint joinPoint) {System.out.println("验证切面....");}}


 

0 0
原创粉丝点击