AOP Demo
一、AOP注解
@EnableAspectJAutoProxy
@Aspect
@Pointcut
@Before
@After
@AfterReturning
@AfterThrowing
@Around
一、Demo
1、目录结构

2、pom.xml导入AOP模块
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
3、代码
(1)业务类:Operation.java
package com.dashu.service;
public class Operation {
public int division(int x, int y) {
return x / y;
}
}
(2)AOP类:LogAspects.java
package com.dashu.aspects;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
@Aspect
public class LogAspects {
@Pointcut("execution(* com.dashu.service..*(..))")
public void logPointcut() {
}
@Before("logPointcut()")
public void logBefore(JoinPoint joinPoint) {
System.out.println("--------------前置通知--------------");
System.out.println("前置通知:在目标方法运行前运行");
System.out.println("方法[" + joinPoint.getSignature().getName() + "]运行了");
System.out.println("参数:");
Object[] args = joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
System.out.println("参数" + i + ":" + args[i] + "[" + args[i].getClass() + "]");
}
System.out.println("----------------------------");
}
@After("logPointcut()")
public void logAfter(JoinPoint joinPoint) {
System.out.println("--------------后置通知--------------");
System.out.println("后置通知:在目标方法运行结束后运行");
System.out.println("方法[" + joinPoint.getSignature().getName() + "]运行结束了");
System.out.println("----------------------------");
}
@AfterReturning(value = "logPointcut()", returning = "result")
public void logAfterReturning(JoinPoint joinPoint, Object result) {
System.out.println("--------------返回通知--------------");
System.out.println("返回通知:在目标方法运行结束后,正常返回结果后运行");
System.out.println("方法[" + joinPoint.getSignature().getName() + "]运行结束了,正常返回结果");
System.out.println("返回值:" + result);
System.out.println("----------------------------");
}
@AfterThrowing(value = "logPointcut()", throwing = "exception")
public void logAfterThrowing(JoinPoint joinPoint, Exception exception) {
System.out.println("--------------异常通知--------------");
System.out.println("异常通知:在目标方法出现异常后运行");
System.out.println("方法[" + joinPoint.getSignature().getName() + "]运行发生异常");
System.out.println("异常信息:" + exception.getMessage());
System.out.println("----------------------------");
}
}
(3)配置类:BeanConfig.java
package com.dashu.config;
import com.dashu.aspects.LogAspects;
import com.dashu.service.Operation;
import org.springframework.context.annotation.*;
@EnableAspectJAutoProxy
@Configuration
public class BeanConfig {
@Bean
public LogAspects logAspects(){
return new LogAspects();
}
@Bean
public Operation operation(){
return new Operation();
}
}
(4)测试类:Main.java
package com.dashu;
import com.dashu.config.BeanConfig;
import com.dashu.service.Operation;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
Operation operation = annotationConfigApplicationContext.getBean(Operation.class);
operation.division(1,1);
}
}
4、测试结果
(1)正常
operation.division(1,1);

(2)异常
operation.division(1,0);
