我想在CDI 1.0中排除扫描类。我在WebLogic 12.1.12(Weld,CDI 1.0)中使用了CDI的默认实现。
我在CDI 1.1中看到了几个网站和文档,但在之前的版本中没有。
答案 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)