Spring使用——AOP功能测试

基本使用步骤

在这里插入图片描述

配置类

package com.ysy.config;

import com.ysy.aop.LogAspect;
import com.ysy.aop.MathCalculator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * @author shanyangyang
 * @date 2020/6/11
 * AOP[动态代理]
 * 		指能在程序运行期间动态的将某段代码切入到指定到指定方法指定位置的变成方式;
 * 1、导入AOP模块	:Spring AOP (spring-aspect)
 * 2、定义一个业务逻辑类,比如数学运算,在方法运行前、后,异常/返回的情况下打印
 * 3、定义一个日志切面类,切面类里面的方法,感知运算方法运行到哪里,然后执行
 * 		通知方法:
 * 				前置通知(@Before)
 * 				后置通知(@After):无论方法是正常结束,还是异常结束
 * 				返回通知(@AfterReturning)
 * 				异常通知(@AfterThrowing)
 * 				环绕通知:(@Around)动态代理,手动推进方法的执行(joinPoint.procced)
 *
 * 4、给切面类标注何时何地执行
 * 5、将业务代码和切面类都添加到容器中
 * 6、必须告诉spring哪个类是切面类(给切面类添加注解@Aspect)
 * 7、给配置类添加@EnableAspectJAutoProxy:开启基于注解的AOP模式
 */
@Configuration
@EnableAspectJAutoProxy
public class MainConfigOfAOP {
	@Bean
	public MathCalculator mathCalculator(){
		return new MathCalculator();
	}
	@Bean
	public LogAspect logAspect(){
		return new LogAspect();
	}
}

业务类

package com.ysy.aop;

/**
 * @author shanyangyang
 * @date 2020/6/11
 */
public class MathCalculator {
	public int div(int i,int j){
		return i/j;
	}
}

切面类

package com.ysy.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;

import java.util.Arrays;

/**
 * @author shanyangyang
 * @date 2020/6/11
 * 切面类
 */
@Aspect
public class LogAspect {
	//抽取公共的切入点表达式
	//1、本类引用
	//2、其他的切面引用
	@Pointcut("execution(public int com.ysy.aop.MathCalculator.*(..))")
	public void pointCut(){}

	//切入点表达式,指定在哪个方法切入
	//JoinPoint必须出现在参数的第一位
	@Before("pointCut()")
	public void logStart(JoinPoint joinPoint){
		Object[] args = joinPoint.getArgs();
		System.out.println(""+joinPoint.getSignature().getName()+"除法运行。。。参数列表是:{"+ Arrays.asList(args)+"}");
	}

	@After("pointCut()")
	public void logEnd(){
		System.out.println("除法结束。。。。。。");
	}

	@AfterReturning(value = "pointCut()",returning = "result")
	public void logReturn(Object result){
		System.out.println("除法正常返回。。。运行个结果:{}"+result);
	}

	@AfterThrowing(value = "pointCut()",throwing = "exception")
	public void logException(Exception exception){
		System.out.println("除法出现异常。。。。。异常信息是:{}"+exception);
	}
}

测试方法

package com.ysy.test;

import com.ysy.aop.MathCalculator;
import com.ysy.bean.Boss;
import com.ysy.bean.Car;
import com.ysy.config.MainConfigOfAOP;
import com.ysy.config.MainConfigOfAutowired;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @author shanyangyang
 * @date 2020/6/4
 */
public class IOCTestOfAOP {
	@Test
	public void test01(){
		AnnotationConfigApplicationContext context =
				new AnnotationConfigApplicationContext(MainConfigOfAOP.class);
		MathCalculator mathCalculator = context.getBean(MathCalculator.class);
		mathCalculator.div(1,1);
		context.close();
	}
}

重点三步走

1、编写业务类和测试类,告诉容器哪个是切面类

2、在切面中通过表达式,让切面方法明白何时何地执行

3、不要忘记开启基于注解的切面功能;@EnableAspectJAutoProxy

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值