Guice依赖注入问题:为无命名DSLContext指定已有实例
解决Guice中未命名DSLContext依赖的问题
这个问题其实是Guice依赖注入里很常见的「命名绑定和未命名绑定不匹配」的问题,我给你两种实用的解决思路,看哪种更贴合你的场景:
方法1:修改CommonsPlayerTokensDaoImpl构造函数,指定注入的命名实例
如果你有权限修改这个类的代码,最直接的方式就是给构造函数的参数加上@Named注解,明确告诉Guice你要使用哪一个已有的DSLContext实例:
DSLContext dslContext; @Inject public CommonsPlayerTokensDaoImpl(@Named("Name1") DSLContext dslContext) { this.dslContext = dslContext; }
这样Guice就能精准匹配到你之前配置好的"Name1"对应的实例,直接解决依赖解析失败的问题。
方法2:在Guice模块中绑定未命名DSLContext到已有命名实例
如果你没办法修改CommonsPlayerTokensDaoImpl的代码,那可以在你的Guice配置模块里,把未命名的DSLContext绑定到你想要的那个命名实例上。比如你想让未命名实例指向"Name1",就在模块的configure方法里添加这段代码:
@Override protected void configure() { // 前提是你已经通过类似 bind(DSLContext.class).annotatedWith(Names.named("Name1")).to(...); 的代码配置了命名实例 bind(DSLContext.class) .toProvider(getProvider(Key.get(DSLContext.class, Names.named("Name1")))); }
这样当Guice需要注入未命名的DSLContext时,就会自动使用"Name1"对应的实例,完全不需要修改目标类的代码。
内容的提问来源于stack exchange,提问作者Eduard Rappa
相关产品推荐
相关产品推荐

