봄 : 다른 콩의 속성을 읽어서 하나의 콩의 속성을 설정 하시겠습니까?
-
05-07-2019 - |
문제
다른 콩의 속성을 읽어서 한 콩의 속성을 설정할 수 있습니까? 예를 들어, 내가 가지고 있다고 가정합니다.
class A {
void setList(List list);
}
class B {
List getList();
}
Spring이 두 클래스를 인스턴스화하고 A의 SetList 메소드를 호출하여 B의 GetList 메소드를 호출 한 결과를 전달합니다. 스프링 구성은 다음과 같은 것처럼 보일 수 있습니다.
<bean id="b" class="B"/>
<bean id"a" class="A">
<property name="list" ref="b" ref-property="list"/>
</bean>
아아,이 메이크업 XML은 작동하지 않습니다.
왜 B에 B를 주입하지 않습니까? 추가 의존성을 소개하고 싶지 않기 때문입니다. A는 B가 아닌 종속 목록입니다.
해결책
스프링 3.0을 사용하는 경우 @Kevin의 답변 외에도 새로운 Spring Expression Language 로이 작업을 수행 할 수 있습니다.
<bean id="a" class="A">
<property name="list"
value="#{b.list}"/>
</bean>
다른 팁
몇 가지 방법이 있습니다. 여기에 하나가 있습니다 :
<bean id="b" class="B"/>
<bean id="a" class="A">
<property name="list">
<bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
<property name="targetObject" ref="b"/>
<property name="propertyPath" value="list"/>
</bean>
</property>
</bean>
또한 참조하십시오 <util:property-path/>
요소
생성자를 위해 똑같이하려고한다면이 작업을 수행하십시오.
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg type="javax.sql.DataSource" value="#{jdbc.dataSource}">
</constructor-arg>
</bean>
여기에서 "JDBC"는 아래에 언급 된대로 Getter and Setter가있는 속성 "DataSource"가 있으며 다음과 같이 시작되었습니다.
<bean id="jdbc" class="com.la.activator.DataSourceProvider">
<property name="myDataSourcePool" ref="dsPoolService"/>
</bean>
제휴하지 않습니다 StackOverflow