代码之家  ›  专栏  ›  技术社区  ›  uı6ʎɹnɯ ꞁəıuɐp

春天有复合属性值吗

  •  1
  • uı6ʎɹnɯ ꞁəıuɐp  · 技术社区  · 17 年前

    我读到有关 复合属性名称 在“ The Spring Framework (2.5) - Reference Documentation - chapter 3.3.2.7 “

    我可以使用相同的概念来设置属性值吗?我可以使用复合字符串作为值表达式吗?

    <bean id="service1" class="a.b.c.Service1Impl" scope="prototype">
       <property name="service2" ref="service2"/>
       <property name="service2.user" value="this-service1-instance.user"/> 
    </bean>
    <bean id="service2" class="a.b.c.Service2Impl" scope="prototype">
        ... 
    </bean>
    

    用户是a.b.c.service1impl的属性,它是 不 控制弹簧。我想将此属性转发到a.b.c.service2impl。

    3 回复  |  直到 17 年前
        1
  •  2
  •   Michael Wiles    17 年前

    与其使用普通的工厂bean,不如使用工厂方法来创建属性的bean,然后注入结果…

    低潮

    在你的情况下,它看起来像 this …

    <!-- the bean to be created via the factory bean -->
    <bean id="exampleBean"
          factory-bean="serviceLocator"
          factory-method="createInstance"/>
    

    所以ID的bean是通过在bean servicelocator上调用createInstance创建的。

    现在Spring不支持开箱即用的嵌套属性,不过您可以考虑创建一个自定义编辑器,它可能提供这种支持——可能但很棘手。可能不值得这么做。

    您可以使用的一种机制是使用工厂bean工厂方法技术嵌套…

    类似:

    <bean id="c" class="C" />
    <bean id="b" factory-bean="c" factory-method="getB"/>
    <bean id="a" factory-bean="b" factory-method="getA"/>
    

    这将有效地公开:a.b.c,其中c有一个方法getb,a有一个方法getb

        2
  •  1
  •   Jack Leow    17 年前

    我不得不做类似的事情,恐怕这是不可能的。我得写一篇 [FactoryBean][1] 暴露财产。

    它看起来像这样:

    public class UserFactory implements BeanFactory {
        private Service2 service2;
        // ... setter and getter for service2
    
        public Object getObject() {
            return getService2().getUser();
        }
    
        public Class getObjectType() {
            return User.class;
        }
    
        public boolean isSingleton() {
            // Since it's a prototype in your case
            return false;
        }
    }
    

    想想看,在你的情况下,你可能会将工厂本身定义为一个原型,在这种情况下,你的 isSingleton() 也许会回到现实中,你需要在这件事上花点时间。

        3
  •  0
  •   Stephen C    17 年前

    Spring的XML连接语法支持列表、映射和属性对象,您可以通过属性编辑器创建其他“数据”对象。

    编辑:(哦,我知道你在问什么。)我认为答案是否定的。我不记得在Spring文档中看到过关于在bean或非bean对象上调用getters的任何提及,更不用说在连接文件中有这样做的语法了。它往往与谷物不符。Spring连接是声明性的,调用getter将导致接近过程的模式。