java-Guice字段注入不起作用(返回null)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Guice字段注入不起作用(返回null),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1219字,纯文字阅读大概需要2分钟。
内容图文
![java-Guice字段注入不起作用(返回null)](/upload/InfoBanner/zyjiaocheng/667/eac9177e738147da98a5a15c9b1ca742.jpg)
我在使用Guice使用null值时遇到问题. Nex我为您展示了类似情况的示例.我知道场注入是一种不好的做法,但是我希望它在演示中像这样工作
我有一个名为B的具体类(这是我要注入的类):
class B{
@Inject
public B(){}
public void fooMethod(){
System.out.println("foo!")
}
}
我有一个名为A的抽象类,它具有类B(我想通过字段注入注入的类):
abstract class A{
@Inject
protected B b;
}
现在,另一个名为C的具体类扩展了A:
class C extends A{
public void barMethod(){
System.out.println("is b null? " + (b==null)); // is true
}
}
我的向导配置如下:
class ConfigModule extends AbstractModule {
@Override
protected void configure(){
// bind(B.class) // I have also tried this
}
@Provides
B getB(){
return new B();
}
@Provides
C getC(){
return new C();
}
}
然后我对Spock进行了测试:
@UseModules(ConfigModule)
class Test extends Specification{
@Inject
public C c;
def "test"() {
// Here goes the test using:
c.barMethod();
}
}
谢谢 :)
解决方法:
这就是让您失望的原因:
@Provides
C getC(){
return new C();
}
删除它.实际上,删除整个模块-您定义的方法都无法帮助您进行注入.
当您创建@Provides C方法时,Guice假定您按照自己的方式创建C,并且不会填充@Inject注释的字段或调用@Inject注释的方法.但是,当C具有@Inject批注或公共无参数构造函数时,Guice将检查对象并根据其@Inject字段和方法创建对象,这就是您要寻找的行为.
内容总结
以上是互联网集市为您收集整理的java-Guice字段注入不起作用(返回null)全部内容,希望文章能够帮你解决java-Guice字段注入不起作用(返回null)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。