gpt4 book ai didi

java - AspectJ @Before 注释问题

转载 作者:行者123 更新时间:2023-12-01 14:21:30 25 4
gpt4 key购买 nike

我在 AspectJ 实现方面遇到了一些问题!
我想为带有@MyAnnotation 注释的方法创建一个日志方法。

MyAnnotation.java :

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation{ }

MyAspect.java :
@Aspect
public class MyAspect {
private static Logger logger = Logger.getLogger(MyAspect.class.getName());

@Pointcut("@annotation(com.utils.aop.annotations.MyAnnotation)")
public void logMyAspect() {
}
@Before("logMyAspect()")
public void logMethod(JoinPoint jp) {
String methodName = jp.getSignature().getName();
logger.info("Executing method: " + methodName);
}
}

我在我的项目的一些服务方法之前使用我的@MyAnnotation:
    @RolesAllowed({ "DEV", "GUI", "API" })
@POST
@Path("/getList")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@MyAnnotation
public Response getList(@Context final ContainerRequestContext requestContext,
FilterAndSortObject filterAndSortObject,
@QueryParam("offset") final int offset,
@QueryParam("limit") final int limit)
{
...
}

我还看到我应该在我的配置类中使用 @EnableAspectJAutoProxy :
@Configuration
@EnableAspectJAutoProxy
public class ServletContextClass implements ServletContextListener {
final static Logger logger = Logger.getLogger(ServletContextClass.class);
@Override
public void contextInitialized(final ServletContextEvent sce) {
...
}
...
}

但是,它似乎不起作用。它不记录任何东西!
我在 logMethod(JoinPoint jp) 中使用了断点以及检查结果,没有任何成功!

有谁知道为什么这不起作用?

最佳答案

您不必将切入点和处理程序方法分开;事实上,我确定这就是导致您出现问题的原因。以下方面应该可以正常工作:

@Aspect
public class MyAspect {
private static Logger logger = Logger.getLogger(MyAspect.class.getName());
@Before("@annotation(com.utils.aop.annotations.MyAnnotation)")
public void logMyAspect(JoinPoint jp) {
String methodName = jp.getSignature().getName();
logger.info("Executing method: " + methodName);
}
}

您还可以检查您的注释值,以防它需要参数:
@Before("@annotation(a)")
public void logMyAspect(JoinPoint jp, MyAnnotation a) {
// conditional logging based on annotation contents
}

关于java - AspectJ @Before 注释问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48344988/

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