Rumah  >  Artikel  >  Java  >  Mengapa Kaedah Pintasan AOP Spring Saya Tidak Dipanggil Dalam Kaedah Lain?

Mengapa Kaedah Pintasan AOP Spring Saya Tidak Dipanggil Dalam Kaedah Lain?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 16:54:30218semak imbas

Why Doesn't My Spring AOP Intercept Method Calls Within Another Method?

Spring AOP Gagal Memintas Panggilan Kaedah dalam Kaedah Lain

Pertimbangkan dua kaedah yang ditakrifkan dalam ABC.java:< ;/p>


kaedah lompang awam1() {

method2();

}

kaedah lompang awam2() {}
< ;/pre>

Untuk menggunakan AOP pada panggilan method2, anda telah menentukan kelas AOPLogger.java dengan kaedah aspek checkAccess. Dalam fail konfigurasi anda:

<br><bean id="advice" class="p.AOPLogger" /><br><aop:config> </p>
<pre class="brush:php;toolbar:false"><aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" />
<aop:aspect id="service" ref="advice">
    <aop:before pointcut-ref="abc" method="checkAccess" />          
</aop:aspect>


Walau bagaimanapun, apabila kaedah2 digunakan, kaedah checkAccess dalam AOPLogger tidak dicetuskan.

Penjelasan

Aspek AOP digunakan pada proksi yang mengelilingi kacang. Apabila anda mendapatkan rujukan kepada kacang, anda sebenarnya tidak bekerja dengan kelas yang dinyatakan dalam konfigurasi anda. Sebaliknya, anda diberikan kelas sintetik yang melaksanakan antara muka yang sesuai, mewakilkan panggilan dan menyediakan kefungsian tambahan (cth., AOP anda).

Dalam kes ini, anda secara langsung menggunakan kaedah2 pada kelas. Jika contoh kelas itu disuntik ke dalam kacang lain sebagai kacang Spring, ia akan disuntik sebagai proksi. Akibatnya, sebarang panggilan kaedah akan dihalakan kepada proksi (dan aspek akan dicetuskan).

Penyelesaian

< p>Untuk menangani isu ini, pertimbangkan pilihan berikut:

    <li>Separate method1 and method2 into distinct beans.</li>
    <li>Employ a non-Spring AOP framework.</li>

Atas ialah kandungan terperinci Mengapa Kaedah Pintasan AOP Spring Saya Tidak Dipanggil Dalam Kaedah Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn