Πώς να χρησιμοποιήσετε τον 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;
Το 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 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.
- Ορισμός AOP στο applicationContext.xml
- Αλλαγή των ρυθμίσεων εξόδου καταγραφής
2. τοποθέτηση
Τώρα θα ήθελα να το εφαρμόσω στην πράξη.
2-1. Δημιουργήστε μια περίπτωση με @Component.
Προετοιμάστε μια κλάση με το "@Component" που δηλώνεται ως εξής. Εκτελέστε μόνο το 'return' καθώς θέλετε να δείτε μόνο την AOP.
@Component
public class TestAop{
public void testMethod() {
return;
}
}
2-2. Ορισμός AOP στο applicationContext.xml
Ρυθμίστε την AOP για την εισαγωγή της διαδικασίας. Οι κόκκινες περιοχές είναι εκείνες που σχετίζονται με την ΑΟΠ.
<?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". Οι περιοχές με κόκκινο χρώμα είναι αυτές που πρέπει να ρυθμιστούν. Οι υπόλοιπες ρυθμίσεις μπορούν να εισαχθούν αυθαίρετα.
<?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, ανατρέξτε σε αυτήν.
Σας ευχαριστούμε που παρακολουθήσατε μέχρι το τέλος.
■INFORMATION
Κάντε κλικ εδώ για να μεταβείτε στην αρχική σελίδα ΠΛΗΡΟΦΟΡΙΕΣ.
■PROFILE
Κάντε κλικ εδώ για ένα προφίλ.
■Στοιχεία επικοινωνίας.
Για ερωτήσεις σχετικά με το άρθρο, παρακαλούμε επικοινωνήστε μαζί μας εδώ.