【发布时间】:2025-12-21 01:55:07
【问题描述】:
我正在创建一个库并帮助实现人体工程学,我将在应用程序启动时创建的注入器传递给库中的不同组件,以便用户可以在某些上下文中执行getInstance(),而无需预先计划在哪里粘贴他们的@Inject 注释。
以下是 API 设计示例:
public static void main(String[] args) {
// Main injector is created here behind the scenes.
ApexApplication app = new ApexApplication()
app.get("/users/:id", context -> {
// Users can do this instead of @Inject UserDAO dao
UserDAO dao = context.getInstance(UserDao.class)
User user = dao.findUserById(context.param("id"))
//...
})
app.start();
}
为了清楚起见,这里是关键实现细节的链接:
我知道 Guice 注入器的最佳实践是在整个应用程序中创建一个且只有一个,使用它来注入所有依赖项,然后将其丢弃;但是,考虑到我想要实现的目标,是否会推荐这种方法,还是我应该研究另一种模式?
【问题讨论】:
-
如果你在 Guice 模块中引入了一个类似
MyModuleHelper的并行类,你可以避免绕过注入器,并且更明确地访问。在其中,填充通过在模块上调用getInstance()初始化的public static final字段(或助手类中的静态方法。)然后,直接从代码库周围使用这些常量字段,而不是传递注入器. -
@Jameson 我不确定我是否遵循。可以举个例子吗?
标签: java dependency-injection guice