java之springboot的spring-boot-starter-aop的切⾯编程的。。。⼀,根据上篇博客的基础上,我们添加AOP切⾯编程,我们先看看l要引⼊什么包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>stmybatis</groupId>
<artifactId>testmybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
spring boot选择题<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.7.RELEASE</version>
</parent>
<dependencies>
<!--springframework.boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--这个mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- swagger-国⼈封装的swagger -->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.0.RELEASE</version>
</dependency>
<!--aop切⾯编程-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--在使⽤mybatis时我们需要重复的去创建pojo类、mapper⽂件以及dao类并且需要配置它们之间的依赖关系,
⽐较⿇烦且做了⼤量的重复⼯作,mybatis官⽅也发现了这个问题,
因此给我们提供了mybatis generator⼯具来帮我们⾃动创建pojo类、
mapper⽂件以及dao类并且会帮我们配置好它们的依赖关系。
-->
<plugin>
<groupId&ator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<configuration>
<configurationFile>${project.basedir}/src/main/l</configurationFile>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
是这个包添加的
⼆,我们编写切⾯编程的类
package stmybatis.aoptest;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
/*作⽤是把当前类标识为⼀个切⾯供容器读取*/
@Aspect
@Component
public class AopAdvice {
/*针对所有控制器的⽅法添加aop
* 1,* com.llers.*.*(..))解析
* 2,第⼀个*是返回任意类型
* 3,com.llers是包路径,针对所有的控制器
* 4,第⼆个*是任意类
* 5,第三个*是任意⽅法
* 6,(..)的任意参数
* */
/* @Pointcut("execution (* com.llers.*.*(..))")*/
/*针对特定控制器,AopTestController的特定⽅法,*/
@Pointcut("execution (* llers.AopTestController.sayHello(..))") public void test() {
}
/*标识⼀个前置增强⽅法,相当于BeforeAdvice的功能*/
@Before("test()")
public void beforeAdvice() {
System.out.println("");
}
/*final增强,不管是抛出异常或者正常退出都会执⾏*/
@After("test()")
public void afterAdvice() {
System.out.println("");
}
/*环绕增强,相当于MethodInterceptor*/
@Around("test()")
public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) {
System.out.println("before");
try {
proceedingJoinPoint.proceed();
} catch (Throwable t) {
t.printStackTrace();
}
System.out.println("after");
}
}
三,添加⼀个控制器,访问测试AopTestController
package llers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/*
* 使⽤@Aspect注解将此类定义为切⾯类
* */
@RestController
@RequestMapping("aopTest")
public class AopTestController {
/*
* 使⽤了aop
* */
@GetMapping("/hello")
public String sayHello(){
System.out.println("hello");
return"hello";
}
/*
* 不使⽤aop
* */
@GetMapping("/sayHelloTwo")
public String sayHelloTwo(){
System.out.println("sayHelloTwo");
return"sayHelloTwo";
}
}
四,最终项⽬结构如下
五,我们通过swagger,访问查看结果,访问hello的到的结果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论