Spring: получение объекта FactoryBean вместо FactoryBean.getObject ()

Краткий вопрос: Если у меня есть класс, который не поддерживает интерфейс FactoryBean, как я могу получить из самого объекта FactoryBean вместо FactoryBean.getObject ()?

Длинный вопрос: Я должен использовать стороннюю библиотеку Spring, которая вряд ли использует интерфейс FactoryBean. Прямо сейчас я всегда должен настроить 2 бина:

<!-- Case 1-->
<bean id="XYZ" class="FactoryBean1" scope="prototype">
    <property name="steps">
        <bean class="FactoryBean2">
            <property name="itemReader" ref="aName"/>
        </bean>
    </property>
</bean>

<bean id="aName" class="com.package.ClassName1" scope="prototype">
    <property name="objectContext">
        <bean class="com.package.ABC"/>
    </property>
</bean>

<!-- Case 2-->
<bean id="XYZ2" class="FactoryBean1" scope="prototype">
    <property name="steps">
        <bean class="FactoryBean2">
            <property name="itemReader" ref="aName2"/>
        </bean>
    </property>
</bean>

<bean id="aName2" class="com.package.ClassName1" scope="prototype">
    <property name="objectContext">
        <bean class="com.package.QWE"/>
    </property>
</bean>

На самом деле определение bean-компонента с именем «XYZ» (сравните с «XYZ2») никогда не изменится, но из-за заводской природы я должен скопировать код для каждой конфигурации. Определение bean-компонента с именем «aName» всегда будет новым (то есть каждая конфигурация будет иметь собственное значение objectContext).

Я хотел бы упростить настройку одного фабричного компонента (удалите «XYZ2» и избавьтесь от ссылки «aName»):

<bean id="XYZ" class="FactoryBean1" scope="prototype">
    <property name="steps">
        <bean class="FactoryBean2"/>
    </property>
</bean>

<bean id="aName" class="com.package.ClassName1" scope="prototype">
    <property name="objectContext">
        <bean class="com.package.ABC"/>
    </property>
</bean>


<bean id="aName2" class="com.package.ClassName1" scope="prototype">
    <property name="objectContext">
        <bean class="com.package.QWE"/>
    </property>
</bean>

К сожалению, это не так просто, как я ожидаю. Я предполагаю склеить фабрику (т.е. bean-компонент XYZ из примера) с необходимыми объектами (то есть "aName", "aName2") во время выполнения. Подход не работает, потому что когда я спрашиваю Spring для объекта FactoryBean, он возвращает мне FactoryBean.getObject (), который невозможно создать в тот момент из-за отсутствия значения itemReader.

Я надеюсь, что SpringSource предвидит мой случай, когда я смогу «зацепить» вызов FactoryBean.getObject (), чтобы обеспечить все необходимые свойства во время выполнения.

Еще одна сложность, которая меня немного беспокоит, это цепочки фабрик (Factory1 получает объект от Factory2, который мне нужно «зацепить» во время выполнения).

Любые идеи будут оценены.

Ответы на вопрос(2)

Ваш ответ на вопрос