什么是AOP
AOP(Aspect Orient Programming)面向切面编程
它的目的就是解耦合,将公共的逻辑(切面)单拎出来开发,在需要的方法中自动织入。默认使用的jdk动态代理
利用AOP可以对业务逻辑的各个部分(非主业务逻辑)进行分离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性
切面: 就是非主业务逻辑,例如: 日志, 事务, 权限等
AOP 底层, 就是采用动态代理模式实现的. 采用了两种代理: JDK 的动态代理, 与CGLIB的动态代理. 默认使用的是JDK动态代理
面向切面的有点:
1) 减少重复, 复用代码
2) 专注于业务功能
使用 logback 日志框架
- 添加logback依赖
<!--添加logback依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
- 添加logback配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan,当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod,设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug,当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<!--
contextName ,设置日志上下文名称,可以通过%contextName来打印日志上下文名称
-->
<contextName>logback</contextName>
<!--
property可以用来设置变量,可以通过${name}来访问,有以下的属性
name,用于${name}访问的key
value,用于${name}访问的value
file ,用于指定配置文件的路径,他的作用在于,如果你有多个配置信息的话,可以直接写在配置文件中,然后通过file引入
<property file="src/main/java/chapters/configuration/variables.properties" />
resource作用和file一样,但是,它是可以直接从classpath路径下引入配置文件
<property resource="resource.properties" />
-->
<property name="log.path" value="src/test/resources/logback.log"/>
<!--
appender格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。
-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="com.example.logback.filter.MyFilter" /> -->
<!--
系统定义的拦截器,例如我们用ThresholdFilter来过滤掉INFO级别以下的日志不输出到控制台中
-->
<!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!--<!–-->
<!--Logger可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN和ERROR,-->
<!--程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。-->
<!--如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、 WARN、ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。为确保所有logger都能够最终继承一个级别,根logger总是有级别,默认情况下,这个级别是DEBUG。-->
<!--–>-->
<!--<level>INFO</level>-->
<!--</filter>-->
<!--encoder和pattern节点组合用于具体输出的日志格式-->
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<ap