1

FactoryBean を実装しようとしています。これが私のコードです:

public class SkilledEmployee extends AbstractFactoryBean<Employee> {

    private Employee emp;
    private Skill skill;

    public SkilledEmployee(Employee emp, Skill skill) {
        this.emp = emp;
        this.skill = skill;
    }

    public Class<Employee> getObjectType() {
        return Employee.class;
    }

    protected Employee createInstance() throws Exception {
            Employee emp1 = new Employee(emp);
        emp1.addSkill(skill);
        return emp1;
    }

    public boolean isSingleton() {
        return true;
    }

}

そして、これが私が自分の豆を宣言した方法です:

<bean id="skilledEmployee1" class="com.pramati.spring.SkilledEmployee">
                <constructor-arg ref="subordinate3"/>
                <constructor-arg ref="singing"/>
            </bean>
            <bean id="skilledEmployee2" class="com.pramati.spring.SkilledEmployee">
                <constructor-arg ref="subordinate2"/>
                <constructor-arg ref="singing"/>
            </bean>

これらの Bean をコンテキストから取得すると、オブジェクトをシングルトンとして宣言したにもかかわらず、別の Bean を取得していることがわかります。

私は FactoryBean を理解しようとしていますが、これは有効なユースケースではなく、設計上の失敗であることを知っています。しかし、なぜこのように振る舞うか知りたかったのですか?誰か説明してくれませんか?

4

2 に答える 2

0

すでに回答されているものへの追加です。ファクトリ Bean をシングルトンとして宣言すると、Bean の初期化自体で createInstance() が呼び出されます。また、ファクトリ Bean をさらに呼び出すと、同じインスタンスが生成されます。singleton() がオーバーライドされていない場合、デフォルト値は false です。また、Bean の初期化時に、インスタンスは作成されません。ファクトリ Bean を取得する呼び出しごとに新しいインスタンスを作成します。

于 2012-07-01T10:02:15.990 に答える