Pertimbangkan kod berikut dalam ABC.java:
<code class="java">public void method1() { // ... method2(); // ... } public void method2() { // ... // ... }</code>
Menambah AOP pada method2 melibatkan penciptaan aspek , AOPLogger, mengandungi kaedah untuk menyemak akses, checkAccess. Konfigurasi Spring termasuk:
<code class="xml"><bean id="advice" class="p.AOPLogger" /> <aop:config> <aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" /> <aop:aspect id="service" ref="advice"> <aop:before pointcut-ref="abc" method="checkAccess" /> </aop:aspect> </aop:config></code>
Walau bagaimanapun, aspek, checkAccess, tidak digunakan apabila kaedah2 dipanggil. Apa yang kurang?
AOP berfungsi dengan menggunakan aspek pada proksi yang mengelilingi kacang. Apabila kacang dirujuk, ia bukan kelas instantiate tetapi kelas sintetik yang mewakilkan kepada kelas sebenar dan menambahkan fungsi seperti AOP.
Dalam contoh, method2 dipanggil terus pada kelas. Apabila disuntik sebagai Spring bean, kelas yang disertakan disuntik sebagai proksinya, mencetuskan aspek pada panggilan kaedah.
Untuk menggunakan AOP pada panggilan kaedah bersarang, pertimbangkan pilihan berikut:
Dokumentasi Spring menyediakan butiran lanjut dan kemungkinan penyelesaian.
Atas ialah kandungan terperinci Mengapa Aspek AOP saya Tidak Dikenakan dalam Panggilan Kaedah Bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!