如何使用Spring的DebugInterceptor。


出版日期:2021年1月19日。



INFOMARTION > 如何使用Spring的DebugInterceptor。

概述。

这是关于如何使用Spring的DebugInterceptor。 下面这个Spring网站帮助我理解了这个概念,但仅从网站上很难理解具体该怎么做,所以我实际验证了这个结果。

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-api

目录

  1. 什么是DebugInterceptor?
  2. 安装
  3. 摘要

1. 什么是DebugInterceptor?

DebugInterceptor是一个通过AOP输出日志的库。 具体来说,就是以下库(jar文件)。 5.1.4版。

https://mvnrepository.com/artifact/org.springframework/spring-aop/5.1.4.RELEASE

具体的Java文件是 "org.springframework.aop.interceptor.DebugInterceptor"。

简而言之,AOP是一种将处理注入到Spring的DI容器上管理的实例的技术。 AOP的正式名称是面向方面的编程。

在这种情况下,我们想把一个DebugInterceptor注入到由@Component生成的实例中。

1-1. 实施环境

我想描述一下所使用的Jar和版本,因为根据环境的不同可能会有轻微的差异。

春天AOP的版本spring-aop-5.1.4.RELEASE.jar
春天的豆子的版本spring-beans-5.1.4.RELEASE.jar
日志输出库的版本slf4j-api-1.7.25.jar
logback-core-1.2.3.jar

1-2. 需要的工作。

需要的工作如下。

  • 用@Component创建一个实例。
  • 在applicationContext.xml中定义AOP
  • 改变日志输出设置

2. 安装

现在我想在实践中实施它。

2-1. 用@Component创建一个实例。

准备一个带有"@Component "的类,声明如下。 只执行'返回',因为你只想看到AOP。

TestAop.java


@Component
public class TestAop{
    public void testMethod() {

        return;

    }

}

2-2. 在applicationContext.xml中定义AOP

设置AOP来注入进程。 红色区域是与AOP相关的区域。

applicationContext.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
~删节~
    <!-- Spring AOP测试. -->
    <bean id="debugInterceptor" class="org.springframework.aop.interceptor.DebugInterceptor" />
    <aop:config>
        <aop:advisor advice-ref="debugInterceptor"
            pointcut="execution(* com.example.TestAop.testMethod(..))"  />
    </aop:config>
</beans>

'pointcut'的写法如下。

pointcut="execution(* 包名称.类别名称.方法名称(..))"

在上面的例子中,它将如下所示。

・包名称:com.example

・类别名称:TestAop

・方法名称:testMethod

如果你想把它应用于所有的方法,则适用如下。

・pointcut="execution(* com.example.TestAop.*(..))"

2-3. 改变日志输出设置

只改变DebugInterceptor的日志级别,因为DebugInterceptor中描述的日志输出级别是 "TRACE"。 红色的区域是需要设置的区域。 其余的设置可以任意输入。

logback.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern><![CDATA[date:%d{yyyy-MM-dd HH:mm:ss}\tthread:%thread\tX-Track:%X{X-Track}\tlevel:%-5level\tlogger:%-48logger{48}\tmessage:%msg%n]]></pattern>
        </encoder>
    </appender>

    <appender name="APPLICATION_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${app.log.dir:-log}/todo-application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${app.log.dir:-log}/todo-application-%d{yyyyMMdd}.log</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <pattern><![CDATA[date:%d{yyyy-MM-dd HH:mm:ss}\tthread:%thread\tX-Track:%X{X-Track}\tlevel:%-5level\tlogger:%-48logger{48}\tmessage:%msg%n]]></pattern>
        </encoder>
    </appender>

    <logger name="org.springframework.aop.interceptor" level="trace">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="APPLICATION_LOG_FILE" />
    </logger>

    <root level="warn">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="APPLICATION_LOG_FILE" />
    </root>

</configuration>

我在创建时看了一些其他人的博客,有些人说输出应该在日志级别DEBUG下输出,但在'spring-aop-5.1.4.RELEASE.jar'的情况下,似乎除非是在日志级别TRACE下,否则就不会输出。

如果配置应该是有效的,但由于某些原因,日志没有被输出,请尝试将日志级别改为TRACE。

2-4. 结果。

如果你在完成上述设置的情况下调用TestAop.java中的testMethod,应该会输出以下日志。 日志很长,所以我删除了几行,但它应该为进入和退出各输出两行,共四行。

date:2021-01-18 15:26:35	thread:http-nio-8081-exec-3	X-Track:84b8ab0aa6504352a815ce85167a1981	level:TRACE	logger:o.s.aop.interceptor.DebugInterceptor	message:Entering ReflectiveMethodInvocation 
date:2021-01-18 15:26:35	thread:http-nio-8081-exec-3	X-Track:84b8ab0aa6504352a815ce85167a1981	level:TRACE	logger:o.s.aop.interceptor.DebugInterceptor	message:Entering ReflectiveMethodInvocation 
date:2021-01-18 15:26:40	thread:http-nio-8081-exec-3	X-Track:84b8ab0aa6504352a815ce85167a1981	level:TRACE	logger:o.s.aop.interceptor.DebugInterceptor	message:Exiting ReflectiveMethodInvocation 
date:2021-01-18 15:26:40	thread:http-nio-8081-exec-3	X-Track:84b8ab0aa6504352a815ce85167a1981	level:TRACE	logger:o.s.aop.interceptor.DebugInterceptor	message:Exiting ReflectiveMethodInvocation 

3. 摘要

如果你对DebugInterceptor的使用不熟悉,请参考它。

谢谢你一直看到最后。




■INFORMATION

请点击这里,进入信息首页。


■PROFILE

请点击这里查看简介。


■联系方式。

有关文章的查询,请在此与我们联系。