Rumah > Java > javaTutorial > teks badan

Mengapa Aspek AOP saya Tidak Dikenakan dalam Panggilan Kaedah Bersarang?

Susan Sarandon
Lepaskan: 2024-10-31 15:51:02
asal
389 orang telah melayarinya

Why is my AOP Aspect Not Invoked in Nested Method Calls?

Panggilan Nested Method dan Spring AOP

Pertimbangkan kod berikut dalam ABC.java:

<code class="java">public void method1() {
    // ...
    method2();
    // ...
}

public void method2() {
    // ...
    // ...
}</code>
Salin selepas log masuk

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>
Salin selepas log masuk

Walau bagaimanapun, aspek, checkAccess, tidak digunakan apabila kaedah2 dipanggil. Apa yang kurang?

Proksi AOP dan Suntikan Kacang

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:

  1. Pemisahan Kacang: Pisahkan kaedah1 dan kaedah2 kepada kacang yang berasingan.
  2. Rangka Kerja AOP Bukan Musim Bunga: Gunakan rangka kerja AOP yang tidak berorientasikan Spring untuk kawalan yang lebih terperinci ke atas aplikasi aspek.

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan