gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:20:07 24 4
gpt4 key购买 nike

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

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)编译得很好。但这两种方法都不受我编写的方面(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){}
}

有人可以帮助我如何实现好方法吗?我只想创建一个注释并用它注释一个类,而该类的所有方法都会受到影响。

提前致谢

最佳答案

使用 @annotation(my.fancy.Annotation) 您可以拦截带注释的方法,而 @within(my.fancy.Annotation) 则匹配带注释的类,如Spring manual 。也许您想在通过尝试和错误使用 Spring AOP 之前阅读它。

关于java - AOP 注释 - 在方法级别工作,而仅对类进行注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57864617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com