Domanda

domanda breve:? Se ho classe che impelemnts interfaccia FactoryBean, come posso ottenere da un oggetto FactoryBean stesso anziché FactoryBean.getObject ()

domanda lungo: devo usare libreria in base a 3-rd partito primavera che è difficilmente usare l'interfaccia FactoryBean. In questo momento ho sempre necessario configurare 2 fagioli:

<!-- 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>

Actyually defintion di un fagiolo con il nome "XYZ" (confrontare con "XYZ2") non sarà cambiato, ma a causa della fabbrica di natura devo copiare il codice per ogni configurazione. Definizione di un fagiolo con il nome "aName" sempre sarà nuovo (vale a dire ogni configurazione avrà proprio valore ObjectContext).

Vorrei semplificare la configurazione hanno un fagiolo singola fabbrica (togliere "XYZ2" e liberarsi di link verso "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>

Purtroppo, non è così semplice come mi aspetto. Suppongo che a fabbrica di colla (vale a dire XYZ fagioli dall'esempio) con gli oggetti necessari (vale a dire "aName", "aName2"), in fase di esecuzione. L'approccio non funziona perché quando chiedo Primavera per oggetto FactoryBean ritorna a me FactoryBean.getObject (), che impossibile instanciate in quel momento a causa della mancanza del valore itemReader.

Spero che SpringSource prevede mio caso posso somehome "gancio" FactoryBean.getObject () chiamata a fornire tutte le proprietà necessarie in fase di esecuzione.

Un altro complessità che mi disturba un po 'è catene di Fabbriche (Factory1 ottenere un oggetto da Factory2 che devo "gancio" in fase di esecuzione).

Tutte le idee saranno apprezzate.

È stato utile?

Soluzione

E 'il & (e commerciale), non il At-simbolo, vedere la documentazione Spring Framework: Personalizzazione logica di istanze utilizzando FactoryBeans

<property name="factoryBean" ref="&amp;theFactoryBean" />

Altri suggerimenti

È possibile ottenere il fagiolo fabbrica stessa utilizzando la sintassi & nella configurazione primavera:

<property name="factoryBean" ref="&theFactoryBean" />

in contrapposizione a:

<property name="createdBean" ref="theFactoryBean" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top