guice-persist - Guice Persist 具有多个持久性单元
问题描述
我已经设置了多个持久性单元的 guice,但我遇到的问题是我更喜欢有一个默认值,而不是必须显式声明一个或另一个。当我想要“另一个”时,我会明确要求它。当我想要默认的时,我会想做同样的事情,就好像我只有一个 PU。
我尝试仅在 PrivateModule 中安装 JpaPersistModule,但这并没有改变任何东西。如果我绑定到“默认”注释并尝试在没有“annotatedWith”分类器的情况下重新绑定,我会收到重新绑定错误。
这可能吗?我相信使用 CDI 中的等价物,我可以注入注入点来查看它并当场做出决定。我还没有在 guice 中找到等价物,但一定有。
就代码而言,这就是我所拥有的(但不想要):
@Inject
public SomethingService(@Primary Repository repository)
@Inject
public SomethingElseService(@Secondary Repository repository)
相反,我想要这个:
@Inject
public SomethingService(Repository repository)
@Inject
public SomethingElseService(@Secondary Repository repository)
解决方案
这与我在如何绑定动态@Named 绑定中尝试使用@Named 注释而不是@Primary / @Secondary 注释非常相似
我已经让它与Provider
s 和PrivateModule
s 一起工作;未经测试的以下代码的某些内容(我认为)会反映我已经开始工作的设置,尽管在您的情况下可能不需要所有这些(并且可能 Jeff 对我的问题的回答会提供更多上下文) :
public class PrimaryRepositoryModule extends AbstractModule {
@Provides
public Repository provideRepository() {
return new PrimaryRepository()
}
}
public class SecondaryRepositoryModule extends AbstractModule {
public void configure() {
install(new PrivateSecondaryRepositoryModule())
}
private static class SecondaryProvider implements Provider<Repository> {
public Repository get() {
return new SecondaryRepository()
}
}
private static class PrivateSecondaryModule extends PrivateModule {
public void configure() {
bind(Repository.class).annotatedWith(Secondary.class)
.toProvider(SecondaryProvider.class)
expose(Repository.class).annotatedWith(Secondary.class)
}
}
推荐阅读
- python - Scikit-learn 管道中的 Keras 模型,具有提前停止功能
- python - 我的 .txt 文件作为一列读入我的笔记本,而不是三个单独的列
- python - selenium python page down - 未知错误:net::ERR_NAME_NOT_RESOLVED
- java - 为什么在这种情况下会发生拆箱?
- c - 如何优化程序的性能С
- python - 构建一个 Discord 机器人来 DM 特定用户 - AttributeError: 'NoneType' object has no attribute 'send'
- flutter - 如何在 Flutter 中更改 Scrollbar 小部件的颜色?
- oracle - 如何知道触发器中 :new 的类型?
- javascript - 我的代码不能绘制任何东西而不是显示白色画布
- ios - 如何将 ContextMenu 与 NavigationLink 一起使用?