gpt4 book ai didi

当注释具有参数时,Java EE CDI 拦截器不起作用

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:02 25 4
gpt4 key购买 nike

我想写一个 CDI 拦截器。如果我的注释只包含 1 个参数,拦截效果很好,但如果使用 2 个参数,拦截就会中断。问题是为什么?

拦截器类:

@Monitored
@Interceptor
@Priority(APPLICATION)
public class MonitoringInterceptor {

@AroundInvoke
public Object logInvocation(InvocationContext ctx) throws Exception {
LOGGER.error("METHOD CALLED!!!"); //this is not called when annotation has 2 parameters
return ctx.proceed();
}
}

注释:

@InterceptorBinding
@Target({TYPE, METHOD})
@Retention(RUNTIME)
@Inherited
public @interface Monitored {
public String layer() default "BUSINESS";
public String useCase() default "N/A";
}

现在是有趣的部分:

@Stateless
public class MyBean {

//this does not work, why?
@Monitored(layer = "BUSINESS", useCase = "test")

//if I use the following annotation it works well
//@Monitored(layer = "BUSINESS")
public String sayHello(String message) {
return message;
}
}

我知道 MyBean 没有用 @Interceptors 注释。这是有意的。拦截器在 beans.xml 中声明:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all">
<interceptors>
<class>my.package.MonitoringInterceptor</class>
</interceptors>
</beans>

最佳答案

参数是绑定(bind)的一部分。用 @Nonbinding 注释参数,或者确保拦截器和拦截点使用相同的值。

关于当注释具有参数时,Java EE CDI 拦截器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24972965/

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