如何判断一个Bean来自哪个Bean Archive?

问题描述 投票:0回答:1

问题

在 Bean 发现期间或之后,我如何确定 Bean 源自哪个 Bean 归档,而不依赖于实现细节(如果可能)?

详细说明

在 Jakarta CDI 和 Java EE CDI 规范中引用了“Bean Archives”。据我所知,Bean 存档是任何包含 beans.xml(显式 bean 存档)或具有已使用 bean 定义注释进行注释的类的 Java 存档。

据我所知,CDI 规范(Jakarta 和 Java EE)都没有添加 bean 归档的概念作为其 API 定义的一部分。

一些 CDI 实现(例如 Weld)具有用于 bean 存档概念的类/接口(例如 BeanArchives、BeanDeploymentArchive),但我不想依赖实现细节。

至于任何可能的答案。我对可能的实现没有任何限制,因为我完全控制 CDI 容器。 无论它采取扩展、拦截器还是装饰器的形式,我真的不介意。

java cdi
1个回答
0
投票

您可以通过以下方式获取档案的工作列表:

someClassLoader.getResources("/META-INF/beans.xml");

…然后确保这些文件实际上是有效的

beans.xml
文件(或者您可以决定信任环境)。

您可以通过以下方式获得大多数课程(但不是全部)的有效位置:

someClass.getProtectionDomain().getCodeSource().getURL();

(这是简短的版本,实际上,您必须处理潜在的

null
,但您明白了。)

从这两个食谱中,也许您可以接近您想要的任何东西。请注意,每种方法都可能失败,但对于涉及使用普通类加载器运行的非模块化 Java 应用程序中的 jar 文件的“正常”情况,您可能可以主要依赖于此。

© www.soinside.com 2019 - 2024. All rights reserved.