짧은 질문 : FactoryBean 인터페이스를 구현 한 클래스가 있다면 FactoryBean.getObject() 대신 FactoryBean 객체 자체에서 어떻게 얻을 수 있습니까?Spring : FactoryBean.getObject() 대신 FactoryBean 객체 얻기
긴 질문 : FactoryBean 인터페이스를 거의 사용하지 않는 제 3 자 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"("가나다"와 비교)와 콩의
Actyually의 (고화질)이 변경되지 않습니다 결코 하지만 때문에 공장 자연의 I는 각각의 코드를 복사해야합니다 구성. 이름이 "aName"인 빈의 정의는 항상 새로운 것입니다 (즉, 각 구성에는 고유 한 objectContext 값이 있습니다).
<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"을 "가나다"를 제거하고 링크를 제거) 단일 공장 콩이있다. 런타임에 필요한 객체 (예 : "aName", "aName2")가있는 팩토리 (예 : XYZ 빈)를 붙이는 것으로 가정합니다. FactoryBean 객체에 대해 Spring에 요청하면 FactoryBean.getObject()가 반환됩니다. 왜냐하면 itemReader 값이 없기 때문에 Instanciate가 불가능하기 때문입니다.
나는 SpringSource가 내 경우를 예기하기를 바란다. 런타임에 필요한 모든 속성을 제공하기 위해 factoryBean.getObject() 호출을 "hook"할 수 있기를 바랍니다.
조금 복잡해 보이는 또 다른 복잡성은 Factory 체인입니다. Factory1은 Factory2에서 객체를 가져 와서 런타임에 "hook"해야합니다.
어떤 아이디어라도 감사하겠습니다.
그렇습니다. 죄송합니다. –
정말 확인 했습니까? 이런 식으로 시도한 예외와 함께 실패합니다 : 발생 원인 : org.xml.sax.SAXParseException : 엔티티 "theFactoryBean"에 대한 참조가 ';'로 끝나야합니다. 구분 기호. – wax
@ 왁스 : 감사합니다. 물론 옳습니다. XML을 올바르게 이스케이프 처리해야합니다. 나는 그것을 바로 잡았습니다 – mhaller