【问题标题】:Late discovery of beans using CDI使用 CDI 延迟发现 bean
【发布时间】:2012-07-10 13:20:21
【问题描述】:

我正在使用 CDI 创建一个 Java Web 应用程序。 My War 包括各种作为 bean 源的 Jar 文件(包括 META-INF/beans.xml 文件)。在 JBoss 等 Java EE 容器中运行时会自动发现我的 bean(我目前使用的是 JBoss AS 7.1.1)。这一切运作良好。

我希望能够扩展 Web 应用程序,理想情况下是允许它从存储在可配置位置(即在系统属性指定的位置)中的 Jar 文件加载类。这也很好,因为我可以使用 ClassLoader 来解析类和资源。我缺少的是让 CDI 扫描这些外部 Jar 文件并包含它们的 bean 的能力。

这将允许我的应用程序托管插件功能,包括新的 REST 资源。我不介意我是否必须重新启动应用程序才能获取这些外部 Jar 文件中包含的类和资源。

我看不出有什么办法做到这一点。在这种环境下,这甚至是应该尝试的事情吗?

【问题讨论】:

    标签: java rest plugins cdi


    【解决方案1】:

    我看不出有什么办法。

    你实际上有两个选择:

    1. 使用CDI extension mechanism 处理bean / bean-archives 在启动时间并以您想要的方式修改它们。查看文档中提供的示例,这应该可以帮助您入门。
    2. 执行时使用BeanManager。看看this类似的问题。

    【讨论】:

    • 谢谢。我想我看到了一种潜在的方法。我创建了一个 CDI 扩展。它@Observes AfterBeanDiscovery 事件并通过搜索插件并将它们注册到事件来响应。这确实使插件 bean 通过 BeanManager 可用。我需要进一步查看是否可以注册插件中可能存在的任何 REST 资源,但对于基本功能,它似乎解决了我的一些问题。
    猜你喜欢
    • 2012-09-19
    • 2013-11-26
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2011-03-28
    • 2021-07-02
    相关资源
    最近更新 更多