代码之家  ›  专栏  ›  技术社区  ›  Tomas

在Springbean定义之外的Springbean中设置属性

  •  4
  • Tomas  · 技术社区  · 16 年前

    例如 a、 xml(不受我控制):

    <bean id="a" class="A"/>
    <bean id="b" class="B">
        <constructor-arg ref="a"/>
    </bean>
    

    b、 xml(由我控制)

    <import resource="classpath:META-INF/a.xml"/>
    <bean id="c" class="C"/>
    <!-- here i want to set a property in bean a -->
    

    一个选择,但我不喜欢它是设置属性编程。 我正在java中使用Spring2.5。

    4 回复  |  直到 16 年前
        1
  •  3
  •   Paul McKenzie    16 年前

    你可以注射 bean-a 进入另一个类并在那里设置它的属性

    <bean id="foo" class="...MySetterClass" init-method="init">
        <property name="candidateBean" ref="a"/>
        <property name="candidateProperty" value="bar"/>
    </bean>
    

    class MySetterClass {
        /*... Setter boilerplate */
        public void init(){
            candidateBean.setCandidateProperty(candidateProperty);
        }
    }
    

    这是一个相当丑陋的方法,但它应该有效。

        2
  •  3
  •   Thomas Jung    16 年前

    您可以在spring配置中定义属性。

    <bean id="myBean"class="myClass">
      <property name="myProperty">
      </property>
    </bean>
    

    豆子 same name can be configured 最后一粒豆子会赢(也许是第一粒我不太确定的豆子)。如果您以定义作为最后一个加载的方式对配置xml文件进行排序,它将重新定义bean。

        3
  •  0
  •   Paul Morie    16 年前

    不知道更多:

    您可以使提供的bean成为另一个bean的父bean,并在第二个bean中注入属性值。然后,使用您创建的bean而不是提供的bean。

    <bean id="myNewBean" parent="suppliedBean">
        <property key="prop" value="foo"/>
    </bean>
    

    如果有其他bean引用了第一个bean,需要注入属性值,或者有代码按名称查找这个bean,那么这将不起作用。同样,根据您的事务和aop配置,有几种情况下这不是您想要的。然而,如果您所需要做的只是为自己的代码在一个普通的旧bean上注入一个属性,那么这应该是可以的。

        4
  •  0
  •   Community Mohan Dere    9 年前

    导入a.xml文件时:

    <bean id="a" class="A"/>
    <bean id="b" class="B">
        <constructor-arg ref="a"/>
    </bean>
    

    这对于客户机类上的init方法修改bean来说是很难看的 a .

    我并不真正理解这里的问题:一些框架可能正在为您提供一个已经准备好、可以运行的spring上下文。如果您不喜欢这个已经准备好的东西,为什么要在运行时用花哨的策略修改它?这只是一个背景。

    如果您不喜欢该bean,您可以在该上下文中重用您想要的bean A. ,只需声明您自己的bean a2

    这只是当bean 如果是这种情况,那么可以复制a.xml上下文并对其进行自定义。


    如果您使用名称空间是因为它更简单,那么有时您会发现在使用名称空间时某些选项是不可能的,最后您会使用FactoryBean或手动声明bean。导入外部xml上下文时,情况是一样的:有时它不做您想要的事情。


    Spring's overriding bean