我试图使用DeltaSpike 1.0 @Exclude -Annotation排除Bean实现。排除应该基于如下属性值:

@Exclude(onExpression = "providerimplementation!=mock")


我创建了一个PropertyFileConfig返回我的.properties文件名,以让DeltaSpike获取配置的值,并在两个不同的实现Bean中使用了该@Exclude,每个bean都像上面一样被排除在外。

该配置作为.jar文件包含在EAR中,并且两种实现都位于EAR中的不同.jar文件中。

我试图将整个归档部署到WebSphere 8.5.5 Server上,并在启动时得到注入点的javax.enterprise.inject.AmbiguousResolutionException

在我看来,虽然我找到了对这种模式(http://deltaspike.apache.org/core.html#excludehttps://groups.google.com/forum/#!topic/java-config/xsleMKST3rU)的引用,但在表达式解析之前就没有使用PropertyFileConfig了,所以我不知道我的设置有什么问题。

最佳答案

第一个答案:

不幸的是,通过PropertyFileConfig工具定义的属性不能与@Exclude一起使用。

这是因为扩展名ConfigurationExtension仅在容器初始化结束时注册PropertyFileConfig(这可能是强制性的,因为PropertyFileConfig类用作CDI Bean)

相反,您必须使用默认的ConfigSource实现:
http://deltaspike.apache.org/documentation/configuration.html#_configsources_provided_by_default
或创建自己的自定义ConfigSource

特别是这里的一种快速解决方法是在默认属性文件中定义您的属性:META-INF/apache-deltaspike.properties
而不是自定义属性文件

编辑:

实际上,我之前的答案是不完整的(至少在最新版本的DeltaSpike(今天为1.3.0)中):
现在,PropertyFileConfig的javadoc记录了此限制,并显示了使用serviceloader工具配置自定义属性文件的另一种方法:
http://deltaspike.apache.org/javadoc/1.3.0/org/apache/deltaspike/core/api/config/PropertyFileConfig.html

09-03 17:35