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> <div class="code" style="position:relative; padding:0px; margin:0px;"><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.
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).
< 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!