如何使用CDI 1.0从扫描中排除类

时间:2014-03-14 13:06:14

标签: java-ee cdi weblogic12c weld

我想在CDI 1.0中排除扫描类。我在WebLogic 12.1.12(Weld,CDI 1.0)中使用了CDI的默认实现。

我在CDI 1.1中看到了几个网站和文档,但在之前的版本中没有。

4 个答案:

答案 0 :(得分:7)

使用Weld,您可以在beans.xml中使用自定义XML命名空间来排除扫描类:

 <beans xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:weld="http://jboss.org/schema/weld/beans">
   <weld:scan>
     <weld:exclude name="com.acme.swing.**"/>
   </weld:scan>
 </beans>

有关详细信息,请参阅Weld Manual

答案 1 :(得分:1)

我曾遇到过这个问题,但未能在CDI 1.0中找到标准解决方案 但是有一个解决方法:用@Alternative标记一个bean,不要在beans.xml中选择这个替代方法(不要在<alternatives>元素中列出它)。应该这样做。
同样在CDI 1.1中,他们用扫描/排除元素填补了这个空白。

答案 2 :(得分:1)

如果@Vetoed(自CDI 1.1起可用)适用于您,则可以使用不带值的@Typed()或使用Apache DeltaSpike @Exclude。 如果您不能(/不喜欢)更改课程,您可以创建CDI-Extension和观察者ProcessAnnotatedType - &gt;如果是,请致电#veto processAnnotatedType.getAnnotatedType().getJavaClass()会返回您要排除的课程。

答案 3 :(得分:0)

我有同样的问题,正如@Yuri所说,你可以使用@Alternative注释来实现它,如果你可以修改类,但如果你不能(例如它是第三方库),那么你可以控制它。

如果你检查cd 1.0(http://java.sun.com/xml/ns/javaee/beans_1_0.xsd)的xsd,你将找不到可以帮助你的标签。

BT有WebLogic 12.1.1,有12.1.2,但没有WebLogic 12.1.12。 (https://en.wikipedia.org/wiki/Oracle_WebLogic_Server#Application_Server_versions