代码之家  ›  专栏  ›  技术社区  ›  Bozho

焊接中外部(第三方)bean的分辨率

  •  6
  • Bozho  · 技术社区  · 15 年前

    我知道它仍然不太受欢迎,因为这个规范是几个月前发布的。

    我还没有“安装”焊接,我只是在阅读,通过这个问题,我想确保我已经正确理解了这一点:

    是否通过将第三方罐中的豆子声明为 <alternatives> 在你 beans.xml ?

    如果没有,如何使用第三方库中没有的bean BEANS.XML ?

    把jar放到类路径上是行不通的,除非 BEANS.XML 在他们 META-INF 对于第三方罐子,这是不可能实现的。(见 Gavin King's post on the subject )

    2 回复  |  直到 13 年前
        1
  •  6
  •   struberg    13 年前

    为什么这么复杂?

    只需为第三方课程制作一个产品。

    假设您有一个第三方库,它可以自动获取PDF文件并按最大文件发送它们,并且您喜欢使用

    private @Inject PdfFaxService faxService;
    

    在您的代码中,那么您可以简单地向它提供一个生产者方法。pdfaxService是无状态的,因此我们可以安全地假设它可以 @ApplicationScoped :

    public @Produces @ApplicationScoped PdfFaxService createFaxService() {
      return new PdfFaxService(initparameters);
    }
    

    某处。

    嗯。

        2
  •  3
  •   Bozho    15 年前

    我对一个 可供替代的 它是可以在不同部署环境(例如测试环境)中使用的接口的其他实现的替代方案。安 可供替代的 bean是通过用注释来声明的 @Alternative .

    要在给定部署方案中使用替代方案,请在 <alternatives> CDI部署描述符的元素 META-INF/beans.xml . 这将启用 @备选方案 默认禁用的bean。

    启用后,如果容器发现给定注入点存在不明确的依赖关系,它将查看可以注入的替代项,如果正好有一个,则选择该替代项。

    换言之, 选择 是替换 现有实施 在部署时使用另一个。如果没有要替换的内容,那么您不需要其他选项,只需将JAR放在类路径上即可。但不确定这正是你的问题,我对第三方JAR的概念有疑问。

    更多在 2.1.4. Alternatives ,请 4.6. Alternatives 4.7. Fixing unsatisfied and ambiguous dependencies (但我想这就是你所读的)。

    更新: 回答你的附加问题。

    如果没有,如何使用没有bean.xml的第三方库中的bean。

    这是不可能的,bean档案必须有 bean.xml (空的)如本节所述 15.6. Packaging and deployment 文件编号:

    CDI没有定义任何特殊的 部署存档。你可以包装 罐子里的豆子,EJB罐子里的豆子,或者战争中的豆子 应用程序中的部署位置 类路径。但是,档案馆 必须 做一个“bean档案”。这意味着每一个 包含bean的存档必须 包含名为的文件 beans.xml META-INF 类路径的目录或 WEB-INF Web根目录(用于 战争档案文件可能为空。 部署在没有 有一个 BEANS.XML 文件将不会 可在应用程序中使用。

    然后,要修复不满意和不明确的依赖关系,请参阅前面提到的第4.7节。

    更新2: 似乎使用 BeforeBeanDiscovery.addAnnotatedType() 可以在bean发现期间添加要考虑的其他类。( BeforeBeanDiscovery 是一个事件)