gpt4 book ai didi

具有多种实现的 Java 依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 06:19:55 25 4
gpt4 key购买 nike

我的问题:如果构建时实现的数量未知,是否可以使用 javax.inject(或任何其他 Java 注入(inject)框架)让 Provider 的使用者在运行时使用多个实现?

关于我对此的需求的一些背景:我致力于可重用框架,该框架在很大程度上结合了工厂和服务定位器的使用来加载实现。其中一些似乎可以重新设计以使用正确的依赖项注入(inject),至少在删除服务定位器方面如此,但有些需要加载在类路径上找到的所有实现。这是通过一个简单的“多实现”实现来实现的,该实现然后加载其他实现,将实例保存在集合中,并在调用 API 时循环遍历它们。

最佳答案

我假设您正在 Java SE 平台(而不是 Java EE 平台)上运行,在这种情况下我强烈推荐 HK2(请参阅 https://hk2.java.net/2.2.0/ )。它对高效实例化服务提供了大量支持,并且当然可以在运行时使用同一合约的多个实现。然后在运行时,您可以使用一整套机制来选择哪个特定实现将满足依赖关系(即服务排名或辅助注入(inject)等)

对于 hk2 的构建时间,您可以创建“居民”文件来描述服务,以便在运行时可以满足这些服务而无需所有类加载(只有选择的一个才会被类加载)如果你做得正确的话)。这可能会在应用程序启动时带来巨大性能提升(如果这类事情对您很重要的话)。

如果您在 Java EE 平台上运行,您也可以使用 HK2,但您还应该仔细研究一下 CDI。 CDI 和 HK2 都是 JSR-330 的实现,因此都可以使用 javax.inject API

关于具有多种实现的 Java 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21104576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com