我试图使用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#exclude和https://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