[SPRING] Spring : FactoryBean.getObject () 대신 FactoryBean 객체 가져 오기
SPRINGSpring : FactoryBean.getObject () 대신 FactoryBean 객체 가져 오기
간단한 질문 : FactoryBean 인터페이스를 구현하는 클래스가 있다면 FactoryBean.getObject () 대신 FactoryBean 객체 자체에서 어떻게 얻을 수 있습니까?
긴 질문 : 저는 FactoryBean 인터페이스를 거의 사용하지 않는 Spring 기반의 3 차 라이브러리를 사용해야합니다. 지금 당장은 항상 2 개의 bean을 설정해야합니다 :
<!-- 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"라는 이름의 bean 정의 ( "XYZ2"와 비교)는 결코 변하지 않을 것이지만 공장 특성 때문에 각 구성에 대한 코드를 복사해야합니다. 이름이 "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>
불행히도, 그것은 내가 기대하는 것처럼 간단하지 않습니다. 런타임에 필요한 객체 (예 : "aName", "aName2")가있는 팩토리 (예 : XYZ 빈)를 붙이는 것으로 가정합니다. 이 접근법은 FactoryBean 객체를 Spring에 요청할 때 FactoryBean.getObject ()를 반환하기 때문에 접근하지 못합니다. FactoryBean.getObject ()는 itemReader 값이 없어서 인스턴스를 생성 할 수 없기 때문입니다.
SpringSource가 나의 케이스를 예견하기를 바란다. FactoryHean.getObject ()를 호출하여 런타임에 필요한 모든 속성을 제공 할 수있다.
나에게 약간의 방해가되는 또 다른 복잡성은 Factory 체인 (Factory1은 런타임에 "hook"해야하는 Factory2로부터 객체를 얻는다)이다.
어떤 아이디어라도 감사 할 것입니다.
해결법
-
==============================
1.At- 심볼이 아닌 & (앰퍼샌드)입니다. Spring Framework 문서를 참조하십시오 : FactoryBeans를 사용한 인스턴스화 로직 커스터마이징
At- 심볼이 아닌 & (앰퍼샌드)입니다. Spring Framework 문서를 참조하십시오 : FactoryBeans를 사용한 인스턴스화 로직 커스터마이징
<property name="factoryBean" ref="&theFactoryBean" />
-
==============================
2.Spring 구성에서 & 구문을 사용하여 factory bean 자체를 얻을 수 있습니다.
Spring 구성에서 & 구문을 사용하여 factory bean 자체를 얻을 수 있습니다.
<property name="factoryBean" ref="&theFactoryBean" />
반대로 :
<property name="createdBean" ref="theFactoryBean" />
from https://stackoverflow.com/questions/1655140/spring-getting-factorybean-object-instead-of-factorybean-getobject by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 : @Value 또는 @ConfigurationProperties를 사용하여 yaml에서 목록 읽기 (0) | 2019.03.20 |
---|---|
[SPRING] Spring : constructor-arg를 annotation으로 대체하는 방법은 무엇입니까? [복제] (0) | 2019.03.20 |
[SPRING] 스프링 쉘을 사용하여 스프링 부트 웹 애플리케이션에서 콘솔 명령을 작성하는 방법은 무엇입니까? (0) | 2019.03.20 |
[SPRING] Spring App을 Websphere에 배치 할 수 없다. (0) | 2019.03.20 |
[SPRING] 변환기를 추가하는 Spring ConversionService (0) | 2019.03.20 |