【问题标题】:Is it possible in Spring to have a reference to part of another bean?在 Spring 中是否可以引用另一个 bean 的一部分?
【发布时间】:2012-07-04 10:47:07
【问题描述】:

代码:

<bean id="bean1" ...
 <property name="Utils">
...
</bean>

我想做:

<bean id="bean2" ...
 <property name="Utils" ref="bean1.Utils"/>

春天可以吗?或者类似的东西? 谢谢。

【问题讨论】:

    标签: java spring properties reference javabeans


    【解决方案1】:

    是的

    <bean id="bean1" ...>
     <property name="Utils" ref="utilBean">
    </bean>
    
    
    <bean id="utilBean" ...>
    

    <bean id="bean2" ...
     <property name="Utils" ref="utilBean"/>
    

    因为utilBean 将是单例,所以bean1bean2 将具有相同的属性实例Utils

    【讨论】:

    • 您假设 OP 所指的 part of bean 是同一容器中的另一个 bean,但这并不总是正确的。
    【解决方案2】:

    我很确定 Jigar Joshianswer 是您所需要的 - 但如果不是,您可以使用 SpEL

    <bean id="bean2" ...
     <property name="Utils" value="#{bean1.getUtils()}"/>
    

    这是假设 bean1 公开了一个 getUtils() 方法。

    请注意,这不是正统的做法,通常不推荐。

    【讨论】:

      【解决方案3】:

      您可以使用 PropertyPathFactoryBean。见http://static.springsource.org/spring/docs/2.5.x/reference/xsd-config.html#xsd-config-body-schemas-util-property-path

      <bean id="bean2" ...
        <property name="Utils">
          <bean id="bean1.Utils"
                class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
      

      这也可以使用 bean1 中没有由 Spring 设置的属性,只要它有一个 getter。

      【讨论】:

        【解决方案4】:

        可以定义为基于xml的like;

        <bean id="bean1">
         <property name="Utils" ref="bean2">
        </bean>
        

        作为基于Java的注解;

        @Autowired
        Bean2 bean2;
        

        【讨论】:

        • 这不是 OP 要求的 - 这只是简单的依赖注入。
        猜你喜欢
        • 1970-01-01
        • 2012-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-23
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        相关资源
        最近更新 更多