zoukankan      html  css  js  c++  java
  • java之springboot的spring-boot-starter-aop的切面编程的使用(四)

    一,根据上篇博客java之springboot的swagger-spring-boot-starter的swagger的使用(三)的基础上,我们添加AOP切面编程,我们先看看pom.xml要引入什么包

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.nl.testmybatis</groupId>
        <artifactId>testmybatis</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <parent>
            <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>org.mybatis.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>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <configuration>
                        <configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</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 com.nl.testmybatis.aoptest;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.springframework.stereotype.Component;
    
    /*作用是把当前类标识为一个切面供容器读取*/
    @Aspect
    @Component
    public class AopAdvice {
    
        /*针对所有控制器的方法添加aop
        * 1,* com.nl.demo.controllers.*.*(..))解析
        * 2,第一个*是返回任意类型
        * 3,com.nl.demo.controllers是包路径,针对所有的控制器
        * 4,第二个*是任意类
        * 5,第三个*是任意方法
        * 6,(..)的任意参数
        * */
       /* @Pointcut("execution (* com.nl.demo.controllers.*.*(..))")*/
    
        /*针对特定控制器,AopTestController的特定方法,*/
        @Pointcut("execution (* com.nl.testmybatis.controllers.AopTestController.sayHello(..))")
        public void test() {
    
        }
    
        /*标识一个前置增强方法,相当于BeforeAdvice的功能*/
        @Before("test()")
        public void beforeAdvice() {
            System.out.println("beforeAdvice...");
        }
    
        /*final增强,不管是抛出异常或者正常退出都会执行*/
        @After("test()")
        public void afterAdvice() {
            System.out.println("afterAdvice...");
        }
    
        /*环绕增强,相当于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 com.nl.testmybatis.controllers;
    
    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的到的结果

  • 相关阅读:
    Installing Apache Spark on Ubuntu 16.04
    基尼系数(Gini coefficient),洛伦茨系数
    非平衡数据机器学习
    FCM聚类算法介绍
    基于大数据技术的手机用户画像与征信研究
    归一化方法 Normalization Method
    区块链(Blockchain)
    统计抽样
    动态规划 Dynamic Programming
    LTE中的各种ID含义
  • 原文地址:https://www.cnblogs.com/May-day/p/14244242.html
Copyright © 2011-2022 走看看