문제

짧은 질문 : FactoryBean 인터페이스를 자극하는 클래스가있는 경우 FactoryBean.getObject () 대신 FactoryBean Object 자체에서 어떻게 얻을 수 있습니까?

긴 질문 : FactoryBean 인터페이스를 거의 사용하지 않는 3-Rd Party Spring 기반 라이브러리를 사용해야합니다. 지금은 항상 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>

"XYZ"라는 이름의 콩을 아크티 정의 ( "XYZ2"와 비교)는 변경되지 않지만 공장 특성 때문에 각 구성에 대한 코드를 복사해야합니다. "aname"이라는 이름의 Bean의 정의 항상 새로운 것입니다 (즉, 각 구성은 자체 ObjectContext 값을 갖습니다).

구성에 단일 공장 Bean ( "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>

불행히도, 예상만큼 간단하지 않습니다. 런타임에 필요한 객체 (예 : "aname", "aname2")와 함께 공장 (예 : 예제의 xyz bean)을 접착한다고 가정합니다. Spring에 FactoryBean 객체를 요청할 때 ItemReader 값이 누락되어 해당 당시에 주입 할 수없는 FactoryBean.getObject ()에게 반환되기 때문에이 방법은 작동하지 않습니다.

Springsource가 제 사건을 예견하여 "훅"actorybean.getObject () 호출을 런타임에 필요한 모든 속성을 제공하기를 바랍니다.

나에게 조금 방해하는 또 다른 복잡성은 공장의 사슬입니다 (Factory1은 런타임에 "훅"해야하는 Factory2에서 물체를 얻습니다).

어떤 아이디어라도 감사하겠습니다.

도움이 되었습니까?

해결책

그건 & (Ampersand)는 Symbol이 아닌 Spring Framework 문서를 참조하십시오. FactoryBeans를 사용하여 인스턴스화 로직 사용자 정의

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

다른 팁

당신은 그것을 사용하여 공장 콩 자체를 얻을 수 있습니다 & 스프링 구성의 구문 :

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

반대로 :

<property name="createdBean" ref="theFactoryBean" />
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top