使用 AOP 进行注释 - 在方法级别工作,而仅对类进行注释



我正在尝试为我的项目创建自定义注释。在这里-

数据源选取器(注释(:

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注释,如下所示 -

数据源选取器方面

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(编译得很好。但是这两种方法都不受我写的方面(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之前通过反复试验来阅读它。

最新更新