说明
springboot中aop的使用,aop是spring框架的两大核心功能之一,还有一个就是ioc,下面我们就springboot中如何引入aop来做一下探讨
相关注解
1.@Component :将当前类注入到Spring容器内。
2.@Aspect :表明当前类是一个切面类。
3.@Pointcut :切入点,PointCut(切入点)表达式有很多种,其中execution用于使用切面的连接点。
4.@Before :前置通知,在被切入方法执行之前执行。
5.@After :后置通知,在被切入方法执行之后执行。
@Aspect
@Component
public class AspectTest {
//切入点:待增强的方法
@Pointcut("execution(public * com.geochance.controller.*.*(..))")
//切入点签名
public void log(){
System.out.println("pointCut签名。。。");
}
@Before("log()")
public void before(){
System.out.println("前置通知");
}
@After("log()")
public void after(){
System.out.println("后置通知");
}
}
6.@AfterRuturning :返回通知,在被切入方法返回结果之后执行。使用此注解的方法,可以使用returning = "XXX"返回被切入方法的返回值,XXX即为被切入方法的返回值,本例中是controller类中方法的返回值。
//返回通知
@AfterReturning(returning = "ret", pointcut = "log()")
public void doAfterReturning(Object ret) throws Throwable {
// 处理完请求,返回内容
System.out.println("返回通知:方法的返回值 : " + ret);
}
7.@AfterThrowing :异常通知,在被切入方法抛出异常之后执行。在此注解中可以使用throwing = "XXX"获取异常信息,获取的异常信息可以在方法中打印出来,举例如下。
//异常通知
@AfterThrowing(throwing = "ex", pointcut = "log()")
public void throwss(JoinPoint jp, Exception ex) {
System.out.println("异常通知:方法异常时执行.....");
System.out.println("产生异常的方法:" + jp);
System.out.println("异常种类:" + ex);
}
实际操作
使用aop完成数据的前置后置消息操作
第一步:使用idea快速创建一个springboot web项目,名称为springboot-demo
第二步:引入aop相关的依赖
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
第三步:创建个controller
@RestController
public class HelloController {
@Autowired
private DataSource dataSource;
@GetMapping("hello")
public String hello() {
System.out.println("dataSource: " + dataSource);
return "hello, spring boot!";
}
}
第四步:创建一个aspect切面类
@Aspect
@Component
public class AspectTest {
//切入点:待增强的方法
@Pointcut("execution(public * com.geochance.controller.*.*(..))")
//切入点签名
public void log(){
System.out.println("pointCut签名。。。");
}
//前置通知
@Before("log()")
public void before(){
System.out.println("前置通知");
}
//返回通知
@AfterReturning(returning = "ret", pointcut = "log()")
public void doAfterReturning(Object ret) throws Throwable {
// 处理完请求,返回内容
System.out.println("返回通知:方法的返回值 : " + ret);
}
//后置通知
@After("log()")
public void after(){
System.out.println("后置通知");
}
//异常通知
@AfterThrowing(throwing = "ex", pointcut = "log()")
public void throwss(JoinPoint jp, Exception ex) {
System.out.println("异常通知:方法异常时执行.....");
System.out.println("产生异常的方法:" + jp);
System.out.println("异常种类:" + ex);
}
}
第六步:启动项目
请求链接: http://localhost:8080/hello
控制台返回结果