Cara membuat aspek pada Metode Antarmuka yang diperluas dari A Super Interface

Saya memiliki Antarmuka lapisan layanan yang diperluas dari Antarmuka dasar; Saya ingin membuat Pointcut di sekitar Antarmuka lapisan layanan saya, tetapi pada salah satu metode yang ditentukan dalam Antarmuka dasar.

Misalnya.... Saya memiliki metode di Antarmuka dasar saya yang disebut "simpan()", saya meletakkannya di Antarmuka dasar saya karena hanya semua Antarmuka "anak" saya akan menyediakan fungsionalitas "simpan".

Saya ingin membuat PointCut hanya pada salah satu antarmuka "anak" saya ketika "simpanan" saya dipanggil.

Saya membuat pointcut seperti berikut:

@Pointcut("execution(* com.xyz.someapp.ChildServiceInterface.save(..))")  
public void childServiceSavePointCut();

Saya kemudian membuat saran @Around di sekitar pointcut di atas seperti berikut:

@Around("childServiceSavePointCut()")
public void doMyAdvice()....

di mana "ChildServiceInterface" memperluas Antarmuka lain yang memiliki metode "save()" yang ditentukan.

Saran saya tidak pernah berjalan... Saya men-debug kode saya dan tidak melihat Saran saya di daftar Penasihat untuk layanan target saya.

Apakah saya berpikir ini akan berhasil, atau apakah saya salah menerapkannya?


person El Guapo    schedule 10.02.2011    source sumber


Jawaban (2)


Coba pointcut ini sebagai gantinya.

within(com.xyz.someapp.ChildServiceInterface+) && execution(* save(..))

+ menunjukkan pola subtipe.

person OrangeDog    schedule 10.02.2011

Atau Anda dapat menggunakan pointcut pada semua metode kelas itu

@Pointcut("execution(* com.xyz.someapp.ChildServiceInterface.*(..))")  
public void childServiceSavePointCut();

* menunjukkan semua jenis metode.

person pokemon blue    schedule 02.07.2017