Spring Aop 细节详解

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
@Aspect
public 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
@Aspect
public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值