将bean作为值注入另一个bean

时间:2017-07-07 19:01:14

标签: java spring jsf dependency-injection

如何将bean作为值注入另一个bean的属性?

例如

        public class FileNameGenerator
    {
        private String name;
        private String type;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
    }

<bean id="FileNameGenerator" class="FileNameGenerator">
        <property name="name">
            <value>value1</value>
        </property>
        <property name="type">
            <value>value2</value>
        </property>
    </bean>

相反,我试图在value1中注入一个工厂方法bean

<bean id="FileNameGenerator" class="FileNameGenerator">
                <property name="name">
                    <value>
<bean class="SomeOtherClass" factory-method="staticMethodThatReturnsString">
</value>
                </property>
                <property name="type">
                    <value>value2</value>
                </property>
            </bean>

我该怎么做?

2 个答案:

答案 0 :(得分:0)

你需要使用SpEL:

   <bean id="FileNameGenerator" class="org....path....FileNameGenerator">
      <property name="name">
         <value>#{T(org....path....SomeOtherClass).staticMethodThatReturnsString()}</value>
      </property>
      <property name="type">
         <value>value2</value>
      </property>
   </bean>
我们提前知道上课的工厂方法,这是不好的做法。你知道你需要String并且你知道如何从一些静态方法中获取它 - 但是返回String的方法并不是它的库存。使用spel只需为字段name调用静态方法。在您的情况下使用工厂方法它是过度使用

答案 1 :(得分:0)

删除工厂bean周围的标记。

您的代码应如下所示:

<bean id="FileNameGenerator" class="FileNameGenerator">
    <property name="name">
        <bean class="SomeOtherClass" factory-method="staticMethodThatReturnsString">
    </property>
    <property name="type">
        <value>value2</value>
    </property>
</bean>