spring依赖注入的问题

JAVA_ZIDANE_J 发布于 2017/02/07 16:31
阅读 275
收藏 0

上面是spring.xml里的配置信息

下面是 程序入口

 

为什么上面的代码执行到Bbb类中Bbb91()方法 没有报ccc的空指针错误?而如果 Aaa类中 sys方法 是 new Bbb().Bbb91();方法时 ccc会报空指针错误?

加载中
0
商杰
商杰
楼主同学对spring的基本概念还没有完全理解,你上面的一堆XML配置文件是将你配置的类由spring容器进行实例化注入到spring容器当中,只有在spring容器的作用范围内,或者通过spring提供的beanfactory方法等获得,而new Aaa()是又重新在虚拟机中实例化了此对象,所以会报空指针的异常。
JAVA_ZIDANE_J
JAVA_ZIDANE_J
new Aaa()调用不报错的。。。
0
天空之夜
天空之夜
aaa,bbb,ccc,ddd,……
JAVA_ZIDANE_J
JAVA_ZIDANE_J
略略略
0
跬步至千里

不好意思,看着aaa,bbb有点头晕

JAVA_ZIDANE_J
JAVA_ZIDANE_J
的确是。。。我自己也晕
0
无毁的湖光-Al
无毁的湖光-Al

Hello,Aaa是需要在Spring上下文中注入的。如果你new Aaa(),那么它仅仅是在jvm中实例化了一个对象,并没有参与到Spring上下文中,所以这个Aaa就不会有下面的bbb的注入动作。导致其调用bbb的时候报空指针。正确的做法是@Autowired Aaa aaa;然后在代码中aaa.sys()

JAVA_ZIDANE_J
JAVA_ZIDANE_J
回复@无毁的湖光-Al : 你好,可能是我的图片让你产生了误会,首先上图的代码是可以跑通没有错误的。其次Aaa和Bbb没有依赖注入的关系。最后我的问题其实是为什么我在Aaa类中使用Bbb的静态方法时,涉及到的与B有依赖关系的C没有报空指针异常。
0
Kit_lee
Kit_lee

你调用的是Bbb的静态方法,而不是spring容器管理的Bbb的实例,那么你如何能要求此方法里边已经注入了Ccc呢?

JAVA_ZIDANE_J
JAVA_ZIDANE_J
回复@Kit_lee : 对的 ,是这个道理 ,没有注入的话Ccc对象在Bbb中不是应该为空么?为什么代码却能够执行到Ccc中的东西,而不是报空指针异常呢?
0
Kit_lee
Kit_lee

@JAVA_ZIDANE_J 抱歉,都被代码晃花眼了,没看清楚。这样来说的确是有点奇怪,唯一只能说明spirng注入了Bbb的静态变量ccc,所以你用静态方法时能调用到(我还是第一次听说有这种情况,得写些代码确认一下)。所以当你自己new一个Bbb的时候,就是空指针了

JAVA_ZIDANE_J
JAVA_ZIDANE_J
回复@Kit_lee : 感谢你的耐心,这几天公司较忙都快忘记这个问题了,所以当时我就是很奇怪。。现在您那里测试的如何了呢?
0
Kit_lee
Kit_lee

试过了,模拟不出来,就算是三个类按你建,跑的时候还是会报空指针

JAVA_ZIDANE_J
JAVA_ZIDANE_J
回复@Kit_lee : 十分感谢,我再次测试一下吧
返回顶部
顶部