首页 文章

spring:通过读取另一个bean的属性来设置一个bean的属性?

提问于
浏览
26

是否可以通过读取另一个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.

3 回答

  • 2

    除了@ Kevin的答案,如果您使用的是Spring 3.0,可以使用新的spring表达式语言来完成

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

    spring 3.0 documentation

  • 18

    有几种方法 . 这是一个:

    <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/元素

  • 47

    如果您尝试对构造函数执行相同操作,请执行此操作 .

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

相关问题