![](/img/trans.png)
[英]AspectJ - Pointcut at specified method with a param annotated with class level annotation
[英]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.