Artikel sebelumnya Pengenalan anotasi Java menjelaskan penggunaan dasar anotasi Java, dan mengimplementasikan alat uji sederhana melalui anotasi khusus; Artikel ini akan memperkenalkan cara menggunakan AOP Spring Boot untuk menyederhanakan pemrosesan anotasi khusus, dan akan menjelaskan konten ini dengan mengimplementasikan alat statistik waktu eksekusi metode sederhana sebagai contoh.
Konsep AOP
Pemrograman berorientasi aspek (AOP, juga diterjemahkan sebagai pemrograman yang berorientasi pada aspek, pemrograman yang berorientasi perspektif, dan pemrograman yang berorientasi pada bagian) adalah istilah dalam ilmu komputer, mengacu pada paradigma pemrograman. Paradigma ini didasarkan pada konstruksi bahasa yang disebut aspek, yang merupakan mekanisme modular baru untuk menggambarkan kekhawatiran lintas yang tersebar dalam objek, kelas, atau fungsi.
Konsep sisi berasal dari perbaikan dalam pemrograman yang berorientasi objek, tetapi tidak terbatas pada ini, ini juga dapat digunakan untuk meningkatkan fungsi tradisional. Konsep pemrograman yang terkait dengan samping juga mencakup protokol meta-objek, subjek, mixin, dan delegasi.
CATATAN: Definisi di atas berasal dari Wikipedia Cina (jika Anda tidak dapat mengaksesnya, Anda dapat mengaksesnya dengan memodifikasi file host sistem. 198.35.26.96 ZH.Wikipedia.org #Chinese Wikipedia, yang hanya dapat membantu sistem host. Jika Anda masih dapat mengaksesnya, silakan mencari di berbagai sistem. memberi tahu Anda secara langsung. Terjemahan kata AOP sedikit tidak konsisten dengan nama arus utama di Cina. Terjemahan domestik utama AOP adalah "pemrograman berorientasi wajah". Jangan berpegang pada namanya, ketahuilah bahwa itu mengacu pada hal yang sama.
Saya kira Anda bingung setelah membaca definisi ini. Jika Anda ingin memiliki pemahaman yang lebih dalam, Anda dapat pergi ke Zhihu untuk melihat bagaimana orang -orang besar berdebat tentang apa AOP pada pemrograman berorientasi? . Sebaiknya ambil contoh di sini.
Persiapan Lingkungan AOP Spring Boot
Memperkenalkan modul ketergantungan yang sesuai di pom.xml
<!-Paket Dependensi Boot Musim Semi-> <partent> <groupid> org.springframework.boot </groupid> <ArtifactId> Spring-boot-starter-parent </artifactid> <version> 1.5.1.release </version> </Parent> <dependencies> <!-AOP Dependency Module- <ArTifactId> Spring-Boot-starter-aop </stifactid> </dependency> <!-Web Dependency Module-> <dependency> <GroupId> org.springframework.boot </groupid> <ArTifactId> Spring-bootter-starter-web </artifactid> </Dependency> </Dependency> </Dependencies>
Menerapkan pemrosesan permintaan web sederhana terlebih dahulu
Pengontrol sederhana untuk menangani permintaan web.
Paket com.craneyuan.controller; impor com.craneyuan.service.ihellorldservice; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.bind.annotation.requestmappapping; impor org.sprramework.bind.annotation.requestmappappappapping; scramework.bind.bind.annotation.requestmappappappapping; sterg.sprramework.bind.annotation.requestmappappappaps; org.springframework.web.bind.annotation.RestController; @RestControllerPublic Class HelloWorldController {@Autowired private ihloworldService HelloWorldService; @RequestMapping (value = "/hello", Method = requestMethod.get) Public String Hello (nama string) {return helloWorldService.getHellomessage (name); }}Saya tidak akan menunjukkan kode untuk kelas implementasi layanan HelloWorld sederhana.
Paket com.craneyuan.service.impl; impor com.craneyuan.annotation.analysisactuator; impor com.craneyuan.service.ihelloRldService; impor org.springframework.beans.factory.annotation java.util.optional; @servicepublic kelas HelloWorldServiceImpl mengimplementasikan IHelloworldService {public string getHellomessage (nama string) {return "hello" + opsional.ofnullable (name) .orelse ("World!"); }}Layanan web yang sederhana sudah siap. Anda dapat memulai proyek dan memanggilnya dengan perintah curl, misalnya: curl -xget -i "http://127.0.0.1:8080/hello?name=java". Jika semuanya berjalan dengan baik, Anda akan mendapatkan tanggapan seperti berikut:
Http/1.1 200content-tipe: Teks/polos; charset = utf-8content-length: 11date: thu, 11 Jan 2018 09:45:38 gmthello java
Gunakan anotasi khusus untuk menghitung waktu eksekusi suatu metode
Pertama -tama tentukan anotasi yang digunakan untuk menghitung waktu eksekusi metode.
Paket com.craneyuan.annotation; impor java.lang.annotation.elementType; impor java.lang.annotation.retention; impor java.lang.annotation.RetensionPolicy; import java.lang.notation.target; @target (elementtype.method)@r dinotation.target; @target (elementtype.method)@r dinotation) note () default "";}
Kemudian tentukan bagian untuk menangani anotasi yang baru saja Anda tentukan.
Paket com.craneyuan.aspect; impor com.craneyuan.annotation.analysisactuator; impor org.aspectj.lang.joinpoint; impor org.aspectj.lang.annotation.aspect; import org.aspectj.ang.annotation.before; impor org.aspecpy.annrger.anPoTation; org.slf4j.LoggerFactory;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;@Aspect@Componentpublic class AnalysisActuatorAspect { final static Logger log = LoggerFactory.getLogger(AnalysisActuatorAspect.class); Threadlocal <long> begintime = threadlocal baru <> (); @Pointcut (" @annotation (analisistuator)") public void servicestatistics (analisis analisistuator ALALITEACtuator) {} @Before ("ServiceStatistics (Analisistuator)") public void dobefore (joinpoint joinpoint, analysisactuator (Systalcuator) {// Rekam penular waktu miring. log.info ("Cy666 Catatan: {}", analisisactuator.note ()); } @After ("ServiceStatistics (Analisistuator)") public void DoAfter (Analisis Analisis AalisisActuator) {log.info ("Cy666 Waktu Statistik: {}, Catatan: {}", System.currentTimeMillis () - begintime.get (), analysactuator.note (note) () - begintime.get (), analysactuator.note (note) () - begintime.get (), analisis.note.note (); }}Akhirnya, cukup tambahkan anotasi @analysisactuator ke metode yang perlu menghitung waktu eksekusi.
Paket com.craneyuan.service.impl; impor com.craneyuan.annotation.analysisactuator; impor com.craneyuan.service.ihelloRldService; impor org.springframework.beans.factory.annotation java.util.optional; @servicepublic kelas HelloWorldServiceImpl mengimplementasikan IHelloworldService {@AnalysisActuator (note = "Get Chat Information Method") Public String gethellomessage (nama string) {hello " + opsional.ofnullable (nama). Orelse (" World! " }}Mulailah proyek dan panggil dengan santai dengan perintah curl. Jika berjalan dengan baik, Anda dapat mengamati log yang dicetak di wajah.
... CY666 Waktu Statistik: 4, Catatan: Metode untuk mendapatkan informasi obrolan
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.