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
。