我试图在Spring中使用等效的bean定义重现Java代码中的赋值。据我所知,Spring只允许您为对象中的字段赋值(假设该类定义了适当的setter方法)。有没有办法简单地使用Spring bean捕获对象的引用?
以下是我希望如何运作的示例:
<!-- Non-working example. -->
<bean id="string" class="java.lang.String">
<value>"I am a string."</value>
</bean>
我意识到在这种特殊情况下我可以使用<constructor-arg>
,但我正在寻找更通用的解决方案,也适用于不提供参数化构造函数的类。< / p>
答案 0 :(得分:2)
String类是不可变的。 java.lang.String类中没有可用的属性setter method
。如果要注入属性值,可以在下面使用:
<bean id="emp" class="com.org.emp">
<property name="name" value="Alex" />
</bean>
在上面的obj emp中,其name属性将被设置为Alex。
答案 1 :(得分:0)
此处使用的内容是factory-method
,可能与factory-bean
结合使用。 (非静态函数必须由适当类型的bean实例化。)在我的示例问题中,我想捕获返回String的函数的输出。假设函数看起来像这样:
class StringReturner {
public String gimmeUhString(String inStr) {
return "Your string is: " + instr;
}
}
首先,我需要创建一个StringReturner
类型的bean。
<bean name="stringReturner" class="how.do.i.java.StringReturner" />
然后我通过调用所需的函数factory-method
来实例化我的String bean。您甚至可以使用<constructor-arg>
元素为工厂方法提供参数:
<bean id="string" factory-bean="stringReturner" factory-method="gimmeUhString">
<constructor-arg>
<value>I am a string.</value>
</constructor-arg>
</bean>
这是(出于我的目的)相当于说:
StringReturner stringReturner = new StringReturner();
String string = stringReturner.gimmeUhString("I am a string.");
答案 2 :(得分:0)
String不是Bean,Bean是一个Objet,他的类具有带有空参数的构造函数,并且属性可由Getters方法访问,并且可由Setters方法修改