调度servlet和上下文Loader Listener之间的bean创建顺序是否存在差异

时间:2015-01-05 07:47:00

标签: spring spring-mvc

当通过上下文Loader Listener加载配置xml时,我在访问实例变量时遇到了问题。

以下是用于创建bean的配置xml

<bean id="A" class"org.sample.A">       
</bean>

<bean id="B" class"org.sample.B">
  <property name="cobj" ref="C"/>
</bean>

<bean id="C" class"org.sample.C"/>

以下是java代码

 Class A{ 
    C cobj = null;
    public A(){
      cobj = B.getInstance().getCobj();
    }
    void display(){
      System.out.println(cobj);
    }
 } 
 Class B{ 
    private static bobj = null;
    C cobj = null;
    public static B getInstance(){
      if (bobj == null) {
         return new B();
      } 
      return bobj;
    }

    public setCobj(C obj){
      this.cobj = obj
    }
    public C getCobj(){
     return cobj;
    }
 }
 Class C{

 }

当通过上下文Loader Listener加载配置xml时,sysout打印为null。 但是当通过Dispatcher servlet加载相同的配置时,该值可用。

此外,如果显示方法如下修改,则显示结果

public void display(){
      B stackObj = new B();
      System.out.println(stackObj.cobj);
   }

通过上下文Loader配置后,Bean B将被初始化。 但是,如果通过调度程序servlet进行配置,则它在类A的早期初始化。

这个创作顺序能否确定?

1 个答案:

答案 0 :(得分:0)

你不要自己创造物品。这就是Spring应该做的事情;为你提供对象。通过拨打xmlBeanFactory加载所有对象,然后实际使用 spring