是spring中两大核心一个是IOC,另一个就是AOP,Aop称为面向切面编程。
Aop中有几个重要概念:
通知advice又有几种:
接下來使用:目的,在方法的前后打印日志。
先创建一个Caluate类,里面有一个方法进行处除法计算:
@Repository public class Caluate { public int divide(int x,int y){ return x/y; } }
先创建一个日志切面类:
@Repository @Aspect //标记这是一个切面类 public class logAspectJ { /** * 切入点表达式 */ @Pointcut("execution(public int com.springAop.Caluate.*(..))")//匹配该类的所有方法 public void pointCut(){ } @Before("pointCut()") public void logStart(){ System.out.println("在方法开始之前执行。。。。"); } @AfterReturning("pointCut()") public void logReturn(){ System.out.println("在方法正常返回执行。。。。"); } @After("pointCut()") public void logend(){ System.out.println("在方法结束之后执行。。。。"); } @AfterThrowing("pointCut()") public void logThrow(){ System.out.println("方法出现异常。。。。"); } }
创建配置类MainAopConfig:
@Configuration @Import({Caluate.class,logAspectJ.class}) @EnableAspectJAutoProxy public class MainAopConfig { }
测试:正常输出
public class AopTest { @Test public void test(){ //创建容器 AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainAopConfig.class); Caluate caluate = applicationContext.getBean(Caluate.class); caluate.divide(2,1); applicationContext.close(); } }
打印结果:
在方法开始之前执行。。。。
在方法结束之后执行。。。。
在方法正常后执行。。。。
测试:出现异常
public class AopTest { @Test public void test(){ //创建容器 AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainAopConfig.class); Caluate caluate = applicationContext.getBean(Caluate.class); caluate.divide(2,0); applicationContext.close(); } }
打印结果:
在方法开始之前执行。。。。
在方法结束之后执行。。。。
方法出现异常。。。。
原文:https://www.cnblogs.com/tdyang/p/11891110.html