4.SpringBoot入门教程之集成AOP

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,是Spring框架中的一个重要内容,基于AOP不会侵入或破坏程序中原有的业务逻辑,对业务逻辑代码进行了很好的隔离。AOP的应用场景通常是通过横向切入程序进行一些日志的记录,数据库连接的打开或则关闭,监控系统当前内存的状况,对请求的特殊字符进行过滤等,下面就是SpringBoot集成AOP的一个小Demo。


目录

开发工具以及版本

idea+jdk1.8

创建一个maven项目

这里我就不多说了,按照步骤来吧!!!
步骤1:
这里写图片描述
步骤2:
这里写图片描述
步骤3:
这里写图片描述
步骤4:
这里写图片描述
步骤5:
这里写图片描述

自此,一个maven项目创建完毕

配置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>spring-boot</groupId>
    <artifactId>spring-boot01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--父依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.13.RELEASE</version>
    </parent>
    <!--指定编码格式和JDK的版本,不指定默认是JDK1.6-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- 添加spring-boot-starter-web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--
        在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-starter-logging,
        该依赖内容就是Spring Boot默认的日志框架Logback,所以我们在引入log4j之前,需要先排除该包的依赖,
        再引入log4j的依赖
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--引入AOP-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.18</version>
        </dependency>
        <!--引入日志依赖-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 添加spring-boot-maven-plugin插件
            作用:该插件支持多种功能,常用的有两种,第一种是打包项目为可执行的jar包,另外
                一个命令就是mvn spring-boot:run,可以直接使用tomcat(默认)启动项目。
            -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

程序目录结构

这里写图片描述

创建MyApplication启动类

说明:
1.不要直接在java目录下直接创建类,要新建一个package
2.类名可以随便取,但是要遵循命名规范

package com;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Created by Administrator on 2018/5/20 0020.
 */
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args){
        SpringApplication.run(MyApplication.class, args);
    }
}

说明:@SpringBootApplication相当于添加@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解

创建控制器MasterController类

package com.controller;

import com.service.MasterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2018/5/22 0022.
 */
@RestController
@RequestMapping("master")
public class MasterController {
    @Autowired
    private MasterService masterService;
    @RequestMapping("/master")
    private String getList(){
        List<Map> list = masterService.getList();
        return list.toString();
    }
}

创建控制器MasterController类

package com.controller;


import com.service.SlaveService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2018/5/22 0022.
 */
@RestController
@RequestMapping("slave")
public class SlaveController {
    @Autowired
    private SlaveService slaveService;

    @RequestMapping("/slave")
    private String getList(){
        List<Map> list = slaveService.getList();
        return list.toString();
    }
}

创建MasterService业务类

package com.service;

import com.mapper.master.MasterMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2018/5/22 0022.
 */
@Service
public class MasterService{
    @Autowired
    private MasterMapper masterMapper;

    public List<Map> getList(){
        List<Map> list = masterMapper.getList();
        return list;
    }
}

创建SlaveService业务类

package com.service;

import com.mapper.slave.SlaveMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2018/5/22 0022.
 */
@Service
public class SlaveService {
    @Autowired
    private SlaveMapper slaveMapper;

    public List<Map> getList(){
        List<Map> list = slaveMapper.getList();
        return list;
    }
}

创建MasterMapper类

package com.mapper.master;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2018/5/22 0022.
 */
@Mapper
public interface  MasterMapper {

    @Select("select * from t_token")
    List<Map> getList();
}

创建SlaveMapper类

package com.mapper.slave;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * Creay Administrator on 2018/5/22 0022.
 */
@Mapper
public interface SlaveMapper {

    List<Map> getList();
}

创建MyAspect类

package com;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

/**
 *  @Aspect注解将一个java类定义为切面类
 *  @Pointcut定义一个切入点,可以是一个规则表达式,比如下例中某个package下的所有函数,也可以是一个注解等
 *  @Before在切入点开始处切入内容
 *  @After在切入点结尾处切入内容
 *  @AfterReturning在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理)
 *  @Around在切入点前后切入内容,并自己控制何时执行切入点自身的内容
 *  @AfterThrowing用来处理当切入内容部分抛出异常之后的处理逻辑
 * Created by Administrator on 2018/5/23 0023.
 */

@Aspect
@Component
public class MyAspect{

    private Logger logger = Logger.getLogger(MyAspect.class);

    //申明一个切点 里面是 execution表达式
    @Pointcut("execution(public * com.controller..*(..))")
    public void webLog(){

    }
    //在切入点开始处切入内容
    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 记录下请求内容
        String url =  request.getRequestURL().toString();
        String method = request.getMethod();
        String ip = request.getRemoteAddr();
        String class_method = joinPoint.getSignature().getDeclaringTypeName();
        String name = joinPoint.getSignature().getName();
        String args = Arrays.toString(joinPoint.getArgs());
        logger.info("URL : " +url);
        logger.info("HTTP_METHOD : " + method);
        logger.info("IP : " + ip);
        logger.info("CLASS_METHOD : " + class_method + "." + name);
        logger.info("ARGS : " + args);
        System.out.println("URL : " +url);
        System.out.println("HTTP_METHOD : " + method);
        System.out.println("IP : " + ip);
        System.out.println("CLASS_METHOD : " + class_method + "." + name);
        System.out.println("ARGS : " + args);

    }
    //在切入点return内容之后切入内容,可以用来对处理返回值做一些加工处理
    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) throws Throwable {
        // 处理完请求,返回内容
        logger.info("RESPONSE : " + ret);
    }
}

创建MasterMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mapper.master.MasterMapper" >


</mapper>

创建SlaveMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mapper.slave.SlaveMapper" >
    <select id="getList" resultType="java.util.Map">
        select * from db
    </select>
</mapper>

修改Tomcat容器的启动端口

在resources目录下创建application.properties文件,并添加端口配置和数据源连接配置

spring.datasource.master.url=jdbc:mysql://39.108.86.136:3306/wechart
spring.datasource.master.username=root
spring.datasource.master.password=root
spring.datasource.master.driverClassName=com.mysql.jdbc.Driver


spring.datasource.slave.url=jdbc:mysql://39.108.86.136:3306/mysql
spring.datasource.slave.username=root
spring.datasource.slave.password=root
spring.datasource.slave.driverClassName=com.mysql.jdbc.Driver

server.port=9999

启动测试

1.启动项目:在MyApplication.java类中运行mian方法
这里写图片描述
2.检查日志

扫描二维码关注公众号,回复: 1214795 查看本文章
"C:\Program Files\Java\jdk1.8.0_131\bin\java" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2017.1.3\lib\idea_rt.jar=51950:C:\Program Files\JetBrains\IntelliJ IDEA 2017.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_131\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\rt.jar;E:\workspace\SpringBoot01\target\classes;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-web\1.5.13.RELEASE\spring-boot-starter-web-1.5.13.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\1.5.13.RELEASE\spring-boot-starter-tomcat-1.5.13.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.31\tomcat-embed-core-8.5.31.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.31\tomcat-annotations-api-8.5.31.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Administrator\.m2\repository\org\hibernate\hibernate-validator\5.3.6.Final\hibernate-validator-5.3.6.Final.jar;C:\Users\Administrator\.m2\repository\javax\validation\validation-api\1.1.0.Final\validation-api-1.1.0.Final.jar;C:\Users\Administrator\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.8.11.1\jackson-databind-2.8.11.1.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.8.0\jackson-annotations-2.8.0.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.8.11\jackson-core-2.8.11.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-web\4.3.17.RELEASE\spring-web-4.3.17.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-beans\4.3.17.RELEASE\spring-beans-4.3.17.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-context\4.3.17.RELEASE\spring-context-4.3.17.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-webmvc\4.3.17.RELEASE\spring-webmvc-4.3.17.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-expression\4.3.17.RELEASE\spring-expression-4.3.17.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-core\4.3.17.RELEASE\spring-core-4.3.17.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter\1.5.13.RELEASE\spring-boot-starter-1.5.13.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot\1.5.13.RELEASE\spring-boot-1.5.13.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\1.5.13.RELEASE\spring-boot-autoconfigure-1.5.13.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-aop\1.5.13.RELEASE\spring-boot-starter-aop-1.5.13.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-aop\4.3.17.RELEASE\spring-aop-4.3.17.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Administrator\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\1.3.1\mybatis-spring-boot-starter-1.3.1.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\1.5.13.RELEASE\spring-boot-starter-jdbc-1.5.13.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\tomcat-jdbc\8.5.31\tomcat-jdbc-8.5.31.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\tomcat-juli\8.5.31\tomcat-juli-8.5.31.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-jdbc\4.3.17.RELEASE\spring-jdbc-4.3.17.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-tx\4.3.17.RELEASE\spring-tx-4.3.17.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\1.3.1\mybatis-spring-boot-autoconfigure-1.3.1.jar;C:\Users\Administrator\.m2\repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;C:\Users\Administrator\.m2\repository\org\mybatis\mybatis-spring\1.3.1\mybatis-spring-1.3.1.jar;C:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar;C:\Users\Administrator\.m2\repository\com\alibaba\druid\1.0.18\druid-1.0.18.jar;C:\Program Files\Java\jdk1.8.0_131\lib\jconsole.jar;C:\Program Files\Java\jdk1.8.0_131\lib\tools.jar;C:\Users\Administrator\.m2\repository\org\slf4j\slf4j-api\1.7.21\slf4j-api-1.7.21.jar;C:\Users\Administrator\.m2\repository\org\slf4j\slf4j-log4j12\1.7.21\slf4j-log4j12-1.7.21.jar;C:\Users\Administrator\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\Administrator\.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar" com.MyApplication

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v1.5.13.RELEASE)

2018-05-30 00:02:59 INFO  MyApplication:48 - Starting MyApplication on PC-20180507AMKP with PID 4152 (E:\workspace\SpringBoot01\target\classes started by Administrator in E:\workspace\SpringBoot01)
2018-05-30 00:02:59 INFO  MyApplication:593 - No active profile set, falling back to default profiles: default
2018-05-30 00:02:59 INFO  AnnotationConfigEmbeddedWebApplicationContext:583 - Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@3712b94: startup date [Wed May 30 00:02:59 CST 2018]; root of context hierarchy
2018-05-30 00:02:59 INFO  Version:30 - HV000001: Hibernate Validator 5.3.6.Final
2018-05-30 00:03:01 INFO  TomcatEmbeddedServletContainer:92 - Tomcat initialized with port(s): 9999 (http)
五月 30, 2018 12:03:01 上午 org.apache.catalina.core.StandardService startInternal
信息: Starting service [Tomcat]
五月 30, 2018 12:03:01 上午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/8.5.31
五月 30, 2018 12:03:01 上午 org.apache.catalina.core.ApplicationContext log
2018-05-30 00:03:01 INFO  ContextLoader:276 - Root WebApplicationContext: initialization completed in 1653 ms
信息: Initializing Spring embedded WebApplicationContext
2018-05-30 00:03:01 INFO  ServletRegistrationBean:190 - Mapping servlet: 'dispatcherServlet' to [/]
2018-05-30 00:03:01 INFO  FilterRegistrationBean:258 - Mapping filter: 'characterEncodingFilter' to: [/*]
2018-05-30 00:03:01 INFO  FilterRegistrationBean:258 - Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-05-30 00:03:01 INFO  FilterRegistrationBean:258 - Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-05-30 00:03:01 INFO  FilterRegistrationBean:258 - Mapping filter: 'requestContextFilter' to: [/*]
2018-05-30 00:03:01 INFO  RequestMappingHandlerAdapter:534 - Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@3712b94: startup date [Wed May 30 00:02:59 CST 2018]; root of context hierarchy
2018-05-30 00:03:01 INFO  RequestMappingHandlerMapping:543 - Mapped "{[/master/master]}" onto public java.lang.String com.controller.MasterController.getList()
2018-05-30 00:03:01 INFO  RequestMappingHandlerMapping:543 - Mapped "{[/slave/slave]}" onto public java.lang.String com.controller.SlaveController.getList()
2018-05-30 00:03:01 INFO  RequestMappingHandlerMapping:543 - Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-05-30 00:03:01 INFO  RequestMappingHandlerMapping:543 - Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-05-30 00:03:01 INFO  SimpleUrlHandlerMapping:362 - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-30 00:03:01 INFO  SimpleUrlHandlerMapping:362 - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-30 00:03:02 INFO  SimpleUrlHandlerMapping:362 - Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-30 00:03:02 INFO  AnnotationMBeanExporter:431 - Registering beans for JMX exposure on startup
2018-05-30 00:03:02 INFO  AnnotationMBeanExporter:918 - Bean with name 'masterDataSource' has been autodetected for JMX exposure
2018-05-30 00:03:02 INFO  AnnotationMBeanExporter:918 - Bean with name 'slaveDataSource' has been autodetected for JMX exposure
2018-05-30 00:03:02 INFO  AnnotationMBeanExporter:672 - Located MBean 'masterDataSource': registering with JMX server as MBean [com.alibaba.druid.pool:name=masterDataSource,type=DruidDataSource]
2018-05-30 00:03:02 INFO  AnnotationMBeanExporter:672 - Located MBean 'slaveDataSource': registering with JMX server as MBean [com.alibaba.druid.pool:name=slaveDataSource,type=DruidDataSource]
2018-05-30 00:03:02 INFO  TomcatEmbeddedServletContainer:216 - Tomcat started on port(s): 9999 (http)
2018-05-30 00:03:02 INFO  MyApplication:57 - Started MyApplication in 2.863 seconds (JVM running for 3.152)

说明:如果需要打印出sql语句的执行情况,则需要在log4j.properties文件中将log4j.appender.stdout.threshold=INFO修改为log4j.appender.stdout.threshold=DEBUG即可

3.通过浏览器访问接口
http://localhost:9999/slave/slave
访问url

4.控制台打印信息

2018-05-30 00:04:11 INFO  DispatcherServlet:508 - FrameworkServlet 'dispatcherServlet': initialization completed in 12 ms
2018-05-30 00:04:11 INFO  MyAspect:47 - URL : http://localhost:9999/slave/slave
2018-05-30 00:04:11 INFO  MyAspect:48 - HTTP_METHOD : GET
2018-05-30 00:04:11 INFO  MyAspect:49 - IP : 0:0:0:0:0:0:0:1
2018-05-30 00:04:11 INFO  MyAspect:50 - CLASS_METHOD : com.controller.SlaveController.getList
2018-05-30 00:04:11 INFO  MyAspect:51 - ARGS : []
URL : http://localhost:9999/slave/slave
HTTP_METHOD : GET
IP : 0:0:0:0:0:0:0:1
CLASS_METHOD : com.controller.SlaveController.getList
ARGS : []
Wed May 30 00:04:11 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Wed May 30 00:04:12 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Wed May 30 00:04:12 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Wed May 30 00:04:13 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Wed May 30 00:04:13 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
2018-05-30 00:04:13 INFO  DruidDataSource:721 - {dataSource-1} inited
2018-05-30 00:04:13 INFO  MyAspect:63 - RESPONSE : [{Create_routine_priv=N, Alter_priv=N, User=mysql.session, References_priv=N, Index_priv=N, Trigger_priv=N, Event_priv=N, Delete_priv=N, Host=localhost, Drop_priv=N, Grant_priv=N, Select_priv=Y, Create_priv=N, Show_view_priv=N, Execute_priv=N, Insert_priv=N, Create_tmp_table_priv=N, Create_view_priv=N, Alter_routine_priv=N, Lock_tables_priv=N, Update_priv=N, Db=performance_schema}, {Create_routine_priv=N, Alter_priv=N, User=mysql.sys, References_priv=N, Index_priv=N, Trigger_priv=Y, Event_priv=N, Delete_priv=N, Host=localhost, Drop_priv=N, Grant_priv=N, Select_priv=N, Create_priv=N, Show_view_priv=N, Execute_priv=N, Insert_priv=N, Create_tmp_table_priv=N, Create_view_priv=N, Alter_routine_priv=N, Lock_tables_priv=N, Update_priv=N, Db=sys}]

如果AOP的配置没有起到效果可能是因为Controller中的方法写成了private私有方法,可以尝试将private修饰修改public。以上是一个创建一个SpringBoot集成AOP的Demo,因作者水平有限,难免会有疏忽和错误,读者可以参考一些SpringBoot官方文档,如下:

SpingBoot官方指南
SpringBoot官网
AOP实现原理


猜你喜欢

转载自blog.csdn.net/m0_37063257/article/details/80504133