我对替代方案的理解是,它是您可以在不同部署环境(例如测试环境)中使用的接口的其他一些实现的替代方案。通过使用 注释来声明替代@Alternative
bean 。
要在给定部署方案中使用替代方案,请在<alternatives>
CDI 部署描述符的元素中选择它META-INF/beans.xml
。这将启用@Alternative
默认禁用的 bean。
启用后,如果容器发现给定注入点的不明确依赖项,它将查看可以注入的替代方案,如果确实有一个,则选择该替代方案。
换句话说,替代方案是在部署时用另一个实现替换现有实现的好方法。如果没有什么可替换的,你不需要替代品,只需将你的 jar 放在类路径上。虽然不确定这是否正是您的问题,但我对 3rd-party jars 的概念有疑问。
2.1.4 中的更多内容。替代品,4.6。替代品和4.7。修复不满意和模棱两可的依赖关系(但我想这就是你正在阅读的内容)。
更新:回答您的其他问题。
如果没有,如何使用没有 beans.xml 的 3rd 方库中的 bean
这不可能发生,bean 存档必须有一个bean.xml
(可以是空的),如第15.6 节所述。文档的打包和部署:
CDI 没有定义任何特殊的部署存档。您可以将 bean 打包在 JAR、EJB-JAR 或 WAR 中——应用程序类路径中的任何部署位置。但是,存档必须
是“bean 存档”。这意味着每个包含 bean 的存档都必须包含一个在类路径目录或
Web 根目录中命名的文件(对于 WAR 存档)beans.xml
。
该文件可能为空。部署在没有文件的档案中的 Bean 将无法在应用程序中使用。META-INF
WEB-INF
beans.xml
然后,要修复不满足和不明确的依赖关系,请参阅前面提到的 4.7 节。
更新 2:似乎BeforeBeanDiscovery.addAnnotatedType()
可以在 bean 发现期间添加其他要考虑的类。(BeforeBeanDiscovery
是一个事件)