你能在Spring中直接为bean分配一个值吗?

时间:2016-02-26 10:05:57

标签: java spring javabeans

我试图在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>

3 个答案:

答案 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方法修改