如何将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>
我该怎么做?
答案 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>