gpt4 book ai didi

java - Guice:什么时候开始在 headless JAR 中进行注入(inject)/引导?

转载 作者:行者123 更新时间:2023-11-30 06:31:42 24 4
gpt4 key购买 nike

所以我正在编写一堆组件(将打包为 JAR),它们都使用 Guice 进行 DI。这些组件只是可重用的“公共(public)”类型的 JAR,将由其他下游项目使用。

我对 Guice 的理解是,您实现了一个具体的 Module 并使用它来将对象绑定(bind)在一起,实际上配置了您的所有 DI。这也是我的理解,然后你应该有一个单独的“引导”阶段,在这个阶段创建 Guice 注入(inject)器,然后模块配置的所有依赖项都从注入(inject)器中获取 injector.getInstance(SomeClass.class)

这在具有入口点的独立应用程序中效果很好,您可以在其中调用 init() 样式的方法来引导 Guice,但在没有入口的 headless JAR 中一点,我正在努力确定何时/何地/如何引导 Guice。

这些将是存在于类路径中的 JAR,并且在任何时候,外部实体都可以调用和分类以及其中的任何方法。我考虑过使用“惰性初始化”设置,其中一个方法检查它的依赖项是否已配置,如果已配置,则启动引导方法。

但这是一个非常糟糕的解决方案!部分原因是,这需要每个类都有自己的 Module(这很荒谬),而且它还会用 DI 相关代码污染我的整个代码库。

我在这里显然遗漏了一些 Guice 基础知识,否则我看不出 Guice 可以用于除了从开始到结束的执行是已知和可控的应用程序之外的任何东西。任何代码示例都是一个巨大的优势!提前致谢。

最佳答案

如果其他代码想使用 Guice 配置您的类,它应该能够。但是,您应该提供一个以合理方式绑定(bind)所有内容的 Guice 模块,以便其他代码(可能是其他模块)可以安装您的模块,然后将依赖项注入(inject)到它们自己的类中。

当然,您根本不需要自己公开模块 - 您可以将其留给其他人来执行所有绑定(bind)。但是,您可能希望提供一个模块以避免公开您的实现细节——您可以公开一个公共(public)接口(interface)和一个公共(public)模块,但随后将实现包保持为私有(private)。模块可以将接口(interface)绑定(bind)到实现,而调用者对此一无所知。

您可能还想研究私有(private)模块,这样您就可以绑定(bind)您的代码 需要的依赖项,而无需更广泛地公开它们。

有些东西,某处必须创建一个注入(inject)器 - 但如果您的代码只是“库”代码,那么它几乎肯定不应该是您。您不应该自己执行注入(inject) - 您应该只是让您的代码适合注入(inject)。

关于java - Guice:什么时候开始在 headless JAR 中进行注入(inject)/引导?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9606630/

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