【发布时间】:2020-08-21 05:14:56
【问题描述】:
我希望在类级别有注释,它将在带注释的类中对每个方法执行建议。 这有可能吗?
示例:我想用 @DoSomethingForMe 注释 OmniDemoService,并且我希望 method1 和 method2 都记录“看看我" 执行前
这个例子不起作用,我不知道为什么。当我将 Pointcut 转换为 Around 并仅将其与注释一起使用时(还将注释 ElementType 更改为方法),一切都在方法级别上工作。 所以我认为这是错误定义的Pointcut。
注释:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DoSomethingForMe {
}
建议:
@Aspect
@Component
public class DoSomethingForMeAdvice {
private static final Logger logger = LoggerFactory.getLogger(DoSomethingForMeAdvice.class);
@Pointcut("execution(public * *(..)) && @annotation(DoSomethingForMe)")
public void anyAnnotatedMethod() {
}
@Before("anyAnnotatedMethod()")
public void acquireExecution() {
logger.info("look at me");
}
}
用法:
@Service
@DoSomethingForMe
public class OmniDemoService {
private static final Logger logger = LoggerFactory.getLogger(OmniDemoService.class);
public void method1() {
logger.info("---1---");
}
public void method2() {
logger.info("---2---");
}
}
【问题讨论】:
-
是的,这是可能的,我不太了解实际问题。你有什么问题?
-
这对我不起作用。可能切入点没有定义好。
-
这可能是一个很好的阅读:baeldung.com/spring-aop-annotation
-
这只是对@Around 方法级别建议用法的简单说明
-
是的,我知道。你想说啥?您是否尝试过复制该配置、更改目标类型和更改注释位置?
标签: java spring aspectj spring-aop