봄 : 다른 콩의 속성을 읽어서 하나의 콩의 속성을 설정 하시겠습니까?

StackOverflow https://stackoverflow.com/questions/1602640

문제

다른 콩의 속성을 읽어서 한 콩의 속성을 설정할 수 있습니까? 예를 들어, 내가 가지고 있다고 가정합니다.

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>

스프링 3.0 문서

다른 팁

몇 가지 방법이 있습니다. 여기에 하나가 있습니다 :

<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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top