Πώς να χρησιμοποιήσετε τον DebugInterceptor της Spring.


Ημερομηνία δημοσίευσης:19 Ιανουαρίου 2021.



INFOMARTION > Πώς να χρησιμοποιήσετε τον 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 είναι μια τεχνική για την εισαγωγή επεξεργασίας σε instances που διαχειρίζονται στο DI container της Spring. Η επίσημη ονομασία του AOP είναι Aspect Oriented Programming.

Σε αυτή την περίπτωση, θέλουμε να εισάγουμε έναν DebugInterceptor στην περίπτωση που δημιουργείται από το @Component.

1-1. περιβάλλον υλοποίησης

Θα ήθελα να περιγράψω το Jar και την έκδοση που χρησιμοποιήθηκε, καθώς ενδέχεται να υπάρχουν μικρές διαφορές ανάλογα με το περιβάλλον.

Έκδοση του spring aopspring-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.
  • Ορισμός AOP στο applicationContext.xml
  • Αλλαγή των ρυθμίσεων εξόδου καταγραφής

2. τοποθέτηση

Τώρα θα ήθελα να το εφαρμόσω στην πράξη.

2-1. Δημιουργήστε μια περίπτωση με @Component.

Προετοιμάστε μια κλάση με το "@Component" που δηλώνεται ως εξής. Εκτελέστε μόνο το 'return' καθώς θέλετε να δείτε μόνο την AOP.

TestAop.java


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

        return;

    }

}

2-2. Ορισμός AOP στο applicationContext.xml

Ρυθμίστε την 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(* όνομα πακέτου.όνομα κλάσης.method-name(..))"

Στο παραπάνω παράδειγμα, θα έχει ως εξής.

・όνομα πακέτου:com.example

・όνομα κλάσης:TestAop

・method-name: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. Αποτέλεσμα.

Αν καλέσετε τη μέθοδο testMethod στο αρχείο TestAop.java με τις παραπάνω ρυθμίσεις ολοκληρωμένες, θα πρέπει να εμφανιστεί το ακόλουθο αρχείο καταγραφής. Το αρχείο καταγραφής είναι μεγάλο, οπότε διέγραψα μερικές γραμμές, αλλά θα πρέπει να βγάζει δύο γραμμές για την Είσοδο και την Έξοδο, συνολικά τέσσερις γραμμές.

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, ανατρέξτε σε αυτήν.

Σας ευχαριστούμε που παρακολουθήσατε μέχρι το τέλος.