복붙노트

[SPRING] spring : 다른 bean의 속성을 읽음으로써 한 bean의 속성을 설정합니까?

SPRING

spring : 다른 bean의 속성을 읽음으로써 한 bean의 속성을 설정합니까?

다른 bean의 속성을 읽음으로써 하나의 bean의 속성을 설정할 수 있습니까? 예를 들어, 내가 가지고 있다고 가정하면 :

class A {
   void setList(List list);
}

class B {
   List getList();
}

Spring이 두 클래스를 모두 인스턴스화하고 A의 setList 메소드를 호출하여 B의 getList 메소드를 호출 한 결과를 전달하고 싶습니다. Spring 설정은 다음과 비슷할 것이다.

<bean id="b" class="B"/>
<bean id"a" class="A">
    <property name="list" ref="b" ref-property="list"/>
</bean>

아아,이 만든 XML은 작동하지 않습니다.

왜 B를 A에 주사하지 않을까요? 나는 여분의 의존성을 소개하고 싶지 않기 때문에. A는 B.가 아니라 오직 종속 목록입니다.

해결법

  1. ==============================

    1.당신이 봄 3.0을 사용한다면 @ 케빈의 대답 외에도 새로운 봄 표현 언어로 이것을 할 수있다.

    당신이 봄 3.0을 사용한다면 @ 케빈의 대답 외에도 새로운 봄 표현 언어로 이것을 할 수있다.

    <bean id="a" class="A">
        <property name="list"
            value="#{b.list}"/>
    </bean>
    

    봄 3.0 문서

  2. ==============================

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

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

    <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>
    

    또한 요소를 참조하십시오.

  3. ==============================

    3.생성자에 대해 동일한 작업을 수행하려는 경우이 작업을 수행하십시오.

    생성자에 대해 동일한 작업을 수행하려는 경우이 작업을 수행하십시오.

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
                <constructor-arg type="javax.sql.DataSource" value="#{jdbc.dataSource}">            
                </constructor-arg>
    </bean>
    

    여기에서 "jdbc"는 getter와 setter가있는 "dataSource"속성을 가지고 있으며 다음과 같이 초기화되었습니다.

    <bean id="jdbc" class="com.la.activator.DataSourceProvider">
        <property name="myDataSourcePool" ref="dsPoolService"/>
    </bean>
    
  4. from https://stackoverflow.com/questions/1602640/spring-set-property-of-one-bean-by-reading-the-property-of-another-bean by cc-by-sa and MIT license