7.2.2. 从扫描过程中排除 Bean
排除过滤器由 bean 归档的 beans.xml 文件中的 <exclude> 元素定义为 子项。默认情况下,排除过滤器处于活动状态。如果 exclude 过滤器包含以下内容,则 exclude 过滤器将变为不活跃:
<scan> 元素的
-
名为
<if-class-available>的子元素及name属性,并且 bean 存档的类加载器无法为该名称加载类,或者 -
名为
<if-class-not-available>的子元素及name属性,bean 存档的类加载器可以为该名称加载类,或者 -
名为
<if-system-property>且带有name属性的子元素,没有为该名称定义系统属性,或者 -
名为
<if-system-property>的子元素带有name属性和 value 属性,没有为该名称定义具有该值的系统属性。
如果过滤器活跃,则该类型不在发现中,且:
- 被发现的类型的完全限定名称与 exclude 过滤器的 name 属性的值匹配,或者
- 被发现类型的软件包名称与 exclude 过滤器的 name 属性的值匹配,或者后缀为 ".*"。
- 被发现类型的软件包名称以 exclude 过滤器的 name 属性值开头
例 7.1. 示例: beans.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<scan>
<exclude name="com.acme.rest.*" /> 1
<exclude name="com.acme.faces.**"> 2
<if-class-not-available name="javax.faces.context.FacesContext"/>
</exclude>
<exclude name="com.acme.verbose.*"> 3
<if-system-property name="verbosity" value="low"/>
</exclude>
<exclude name="com.acme.ejb.**"> 4
<if-class-available name="javax.enterprise.inject.Model"/>
<if-system-property name="exclude-ejbs"/>
</exclude>
</scan>
</beans>注意
使用 @Vetoed 标注 Jakarta EE 组件是安全的,防止它们被视为 Bean。事件不会触发标有 @Vetoed 的 任何类型,也不会在标有 @Vetoed 的软件包中触发。如需更多信息,请参见 @Vetoed。