我今天遇到了这种困惑。引用 Weld 的文档(在第 9.3 节下),
默认情况下,所有拦截器都被禁用。我们需要启用我们的拦截器。我们可以使用 bean 存档的 beans.xml 描述符来做到这一点。但是,此激活仅适用于该存档中的 bean。
但是,在我目前正在进行的项目中,我有一个用于分析方法的拦截器。我META-INF/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"
version="1.1" bean-discovery-mode="all">
</beans>
然而,我仍然从该分析拦截器中获得预期的日志。那么,正如标题所说,拦截器真的默认禁用了吗?
顺便说一句,我weld-se
在项目中使用 CDI 功能,因为 CDI 是 Java EE 堆栈中项目唯一需要的东西。
更新
今天折腾了拦截器,发现如果用 old@Interceptors
来表示拦截实现类,就不需要在beans.xml
. 但是,如果使用拦截器绑定,即使用@Interceptor
注解指示拦截器类,则必须通过将拦截器类添加到beans.xml
. 根据我的经验,CDI 1.1 仍然如此,如beans.xml
上面的版本所示。顺便说一句,我org.jboss.weld.se:weld-se:2.0.4.Final
在这种情况下用于 CDI 实现,我相信它实现了 CDI 1.1。