簡體   English   中英

使用AOP進行注釋-在方法級別上起作用,而僅對類進行注釋

[英]Annotation with AOP - works at method level while only the class is annotated

我正在嘗試為我的項目創建自定義注釋。 這里是 -

DataSourcePicker (注釋):

   import java.lang.annotation.ElementType;
   import java.lang.annotation.Retention;
   import java.lang.annotation.RetentionPolicy;
   import java.lang.annotation.Target;

   @Target({ElementType.METHOD, ElementType.TYPE})
   @Retention(RetentionPolicy.RUNTIME)
       public @interface DataSourcePicker {

   }

我已經使用AOP這樣實現了DataSourcePicker注釋-

DataSourcePickerAspect

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class DataSourcePickerAspect implements Ordered {

    private int order;

    @Value("10")
    public void setOrder(int order) {
        this.order = order;
    }

    @Override
    public int getOrder() {
        return order;
    }

    @Pointcut(value="execution(public * *(..))")
    public void anyPublicMethod() { }


    @Around("@annotation(dataSourcePicker)")
    public Object pickDataSource(ProceedingJoinPoint pjp, 
    DataSourcePicker dataSourcePicker) throws Throwable {
        //some code...
    }
}  

當我試圖像這樣注釋我的服務類時,首先要設置好這些內容-

(好的方法)

   @Service
   @DataSourcePiceker
   public SomeServiceClass{     
       pubic void method1(){}
       pubic int method2(List<Integer> list){}
       pubic String method3(String a, String b){}
   }

上面的代碼( SomeServiceClass )可以正常編譯。 但是這兩種方法都不受我編寫的aspect( DataSourcePicker )的影響。 但是,當我注釋我的方法與DataSourcePicker它按預期工作-所有的方法都被截獲DataSourcePickerAspect@Around建議-

我猜不是很好的方法 ):

   @Service
   @DataSourcePiceker
   public SomeServiceClass{
       @DataSourcePiceker     
       pubic void method1(){}

       @DataSourcePiceker
       pubic int method2(List<Integer> list){}

       @DataSourcePiceker
       pubic String method3(String a, String b){}
   }  

有人可以幫助我如何實現Good Approach嗎? 我只想創建一個注釋並用它注釋一個類,而該類的所有方法都會受到影響。

提前致謝

使用@annotation(my.fancy.Annotation)可以攔截帶注釋的方法,而@within(my.fancy.Annotation)匹配帶注釋的類,如Spring手冊中所述 也許您想在通過嘗試和錯誤使用Spring AOP之前閱讀它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM