最近在做小的spring项目,遇到一个问题比如有一个类叫Carholder里面有一个属性叫car,还有一个类叫Car现在我想创建三个Car的实例  
<bean id="car1" class="Car">
<bean id="car2" class="Car">
<bean id="car3" class="Car">还有3个Carholder实例
<bean id="carholder1" class="Carholder">
    <property name="car" ref="car1"></property>
</bean>
<bean id="carholder2" class="Carholder">
    <property name="car" ref="car2"></property>
</bean>
<bean id="carholder3" class="Carholder">
    <property name="car" ref="car3"></property>
</bean>Carholder里面有getter setter方法,但是setter方法没有被调用但是如果我把car1改成car,其他不变
<bean id="car" class="Car">
<bean id="car2" class="Car">
<bean id="car3" class="Car">
<bean id="carholder1" class="Carholder">
    <property name="car" ref="car"></property>
</bean>
<bean id="carholder2" class="Carholder">
    <property name="car" ref="car2"></property>
</bean>
<bean id="carholder3" class="Carholder">
    <property name="car" ref="car3"></property>
</bean>结果carholder1,carholder2,carholder3都注入成功,但是car注入的是第一个car的实例,完全不懂为什么,求大神赐教SpringBean实例

解决方案 »

  1.   

    spring默认是单类的。
     <bean id="car" class="Car" scope="prototype">
    这样试试
      

  2.   

    <bean id="car" class="Car" scope="prototype">
    这种方式创建car时,每次都是新的实例
      

  3.   

    ?你想在启动的时候加载好car的bean
      

  4.   

    考虑这种做法:
    1:类car提供三个静态工厂方法,每个方法都返回new Car();
    然后配置bean实例
    比如:
    <bean id="car" class="" factory-method="createInstance"/>
    <bean id="car2" class="" factory-method="createInstance2"/>
    <bean id="car3" class="" factory-method="createInstance3"/>2.专门提供一个工程类,编写三个工长方法,每个方法返回new Car();<bean id="carFactory" class="">
    <!-- inject any dependencies required by this  bean -->
    </bean> <bean id="car"
        factory-bean="carFactory"
        factory-method="createCarInstance"/>
    <bean id="car2"
        factory-bean="carFactory"
        factory-method="createCarInstance2"/>
    <bean id="car3"
        factory-bean="carFactory"
        factory-method="createCarInstance3"/>