A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© peiyanda 中级黑马   /  2015-12-14 22:54  /  609 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这里说的是在spring容器中互不相关的两个bean的初始化顺序。例如:
<bean id="a" class="A"/>
<bean id="b" class="B"/>

问题是这样的:
class A{
private X x=B.service();
}
class  B{
    private static C c;
    public static X service(){
        // lalala

        c.haha();
    }
   public void setC(C c){
       B.c=c;
    }
}
<bean id="a" class="A"/>
<bean id="b" class="B">
    <property name="c" ref="xxxxx"/>
</bean>

A通过B的静态方法service(),在构造方法中去初始化成员变量x;B的静态方法service()需要调用类变量c,而c是spring通过成员方法setC(C c)来注入的。
这种情况下,如果spring配置中,a在b的前面,则a在初始化的时候,会在lalala处抛出空指针异常。因为这个时候,srping还没有完成b的装配,因此B.c是null,调用c.haha()会抛异常。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马