简化后的代码如下:<bean name="mockDao" class="com.MockDao"/>
 <alias name="mockDao" alias="dao"/>
     
 <bean name="handler"  class="com.Handler">
          <property name="mockDao" ref="dao"/>
  </bean>
  <bean name="dao"  class="com.ActualDao">
   </bean>
我的本意是:当调用Handler中dao方法时,程序会去调用MockDao的方法。
但是在实际运行时,程序并没有调用mockDao的方法,而是继续调用 ActualDao中的方法。
程序为什么没有去调用mockDao中的方法,而是继续调用Dao中的方法呢?但是如果把代码改成<property name="mockDao" ref="dao2"/>
<alias name="mockDao" alias="dao2"/>
程序会去调用MockDao中的方法。难道与spring的加载顺序有关?

解决方案 »

  1.   

    我们项目里,到处都是使用<alias>,感觉使用alias的目的不是起到给bean设置别名的用途,而是拿alias来当拦截器使用,因为项目代码中alias对应的对象不是同一个。例如,想让代码调用我们自己新建的class,而把别人的class覆盖掉就会使用<alias name="myClass" alias="actualClass"/> 来实现。我感觉这种用法本来就不正确,不知道大家有什么看法。