Java 将一个bean作为值注入另一个bean的属性

Java 将一个bean作为值注入另一个bean的属性,java,spring,jsf,dependency-injection,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) {

如何将一个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>
公共类文件名生成器
{
私有字符串名称;
私有字符串类型;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getType(){
返回类型;
}
公共void集合类型(字符串类型){
this.type=type;
}
}
价值1
价值2
相反,我尝试在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
我该怎么做?

您需要使用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>

#{T(org…path…SomeOtherClass).staticMethodThatReturnsString()}
价值2

美国工厂的上课方法,你们事先知道,这是不好的做法。你们知道你们需要字符串,你们知道如何从一些静态方法得到它——但返回字符串的方法不是facory。对于spel,只需调用字段
name
的静态方法。在您的案例中,使用工厂方法是过度使用的

删除工厂bean周围的标记

您的代码应该如下所示:

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

价值2