0

私はBean Employeeを次のように持っています:

public class Employee {
    private int empId;
    public int getEmpId() {
        return empId;
    }
    public void setEmpId(int empId) {
        this.empId = empId;
    }
}

次のような EmployeeList クラス:

public class EmployeeList {
    @Autowired
    public Employee[] empList;
}

春の設定ファイル:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:annotation-config/>

 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

    <bean id="empBean" class="Employee" scope="prototype">
    </bean>
    <bean id="empBeanList" class="EmployeeList">
    </bean>
 </beans>

メイン メソッド クラス:

public class App 
{

    public static void main( String[] args )
    {
        ApplicationContext empContext = new ClassPathXmlApplicationContext(
                "employee-module.xml");

        EmployeeList objList = (EmployeeList) empContext.getBean("empBeanList");

        Employee obj = (Employee) empContext.getBean("empBean");
        obj.setEmpId(1);
        System.out.println(obj.getEmpId());
        System.out.println("length " + objList.empList.length);

        Employee obj1 = (Employee) empContext.getBean("empBean");
        obj1.setEmpId(2);
        System.out.println(obj1.getEmpId());
        System.out.println("length " + objList.empList.length);

        Employee obj2 = (Employee) empContext.getBean("empBean");
        System.out.println("length " + objList.empList.length);
    }
}

取得する Employee インスタンスの数は常に 1 です。Bean インスタンスを複数回取得しても増加しないのはなぜですか。Employee Bean には、プロトタイプとしてのスコープがあります。

4

1 に答える 1

3

新しいプロトタイプインスタンスを取得しても、以前にインスタンス化されたBean配列に魔法のように追加されるわけではないためです。

コンテキストが起動すると、単一の従業員Beanがインスタンス化されてempBeanListBeanに注入され、次にempList Beanが作成され、それ以上変更されません。

于 2012-12-07T17:51:34.077 に答える