你能直接给Spring中的一个bean赋值吗?

Can you assign a value directly to a bean in Spring?

我正在尝试用 Spring 中的等效 bean 定义重现 Java 代码中的赋值。不过,据我所知,Spring 只允许您为对象内的字段赋值(前提是 class 定义了适当的 setter 方法)。有没有一种方法可以使用 Spring beans 简单地捕获对​​对象的引用?

这是我希望它如何工作的示例:

<!-- Non-working example. -->
<bean id="string" class="java.lang.String">
    <value>"I am a string."</value>
</bean>

我意识到在这种特殊情况下我可以只使用 <constructor-arg>,但我正在寻找更通用的解决方案,一个也适用于 class 不提供参数化的解决方案构造函数。

字符串 class 是不可变的。在 java.lang.String class 中没有 属性 setter method。如果你想注入 属性 值,你可以在下面使用:

<bean id="emp" class="com.org.emp">
    <property name="name" value="Alex" />
</bean>

在上面的 obj emp 中,其名称 属性 将被设置为 Alex。

这里要使用的是 factory-method,可能与 factory-bean 结合使用。 (非静态函数必须由适当类型的 bean 实例化。)在我的示例问题中,我想捕获 returns 字符串的函数的输出。假设函数如下所示:

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.");

String 不是 Bean,Bean 是一个 Objet,他的 Class 具有带空参数的构造函数,属性可通过 Getters 方法访问并且可通过 Setters 方法修改