前言:
这里就主要演示Spring中Aop使用注解是怎么使用,如果需要了解更多Aop相关概念,可查看相关资料的介绍
一、项目目录 【标记文件为主要文件】
二、各个文件的代码
AopServer.java 【编写切点的文件,就是一些需要被修饰的业务处理】
package aop; import org.springframework.stereotype.Service; @Service public class AopServer { public void add() { System.out.println("旧版本添加业务处理"); } }
AspectClass.java 【切面文件,定义一些前置后置环绕接口】
package aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
* @author Luck
* Aop 插入示例
*/
@Component // 告知Spring容器这是有个Bean对象
@Aspect // 声明这是一个切面
public class AspectClass {
// 定义切点
@Pointcut("execution(* aop.AopServer.*(..))")
public void pointCut() {}
@Before("pointCut()") // 可使用复用的切点
public void start() {
System.out.println("前面插入方法");
}
@After("execution(* aop.AopServer.*(..))") // 可使用自己定义的规则切点
public void end() {
System.out.println("后面插入方法");
}
@Around("pointCut()")
public void around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("环绕插入前。。。。。。。。。。");
joinPoint.proceed();
System.out.println("环绕插入后。。。。。。。。。。");
}
}
AopApplication.java 【测试入口,也是Spring Boot的入口】
package aop; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Configuration @Controller @SpringBootApplication @ComponentScan(basePackages="aop") public class AopApplication { @Autowired public AopServer sopServer; @RequestMapping(value="/aopDemo") @ResponseBody public String aopDemo() { sopServer.add(); return "success"; } public static void main(String[] args) { SpringApplication.run(AopApplication.class); } }
通过url访问控制台打印结果如下:
三、当一个连接点被一个切面的多个注解混合配置时Aop执行顺序如下:
没有出现异常情况
出现异常情况:
四、当一个连接点被多个切面的多个注解混合配置时Aop执行顺序是不确认的。如果需要确认执行顺序,可通过在Aspect的类上面使用@Order(value)注解来确定多个Aspect的顺序,Order里面的value越小优先级越高
原文地址:https://www.cnblogs.com/cairiqiang/p/10085653.html