字符串没有属性“名称”,因此您无法以您尝试的方式实例化一个。此外,您不需要,因为您可以直接将其用作值,例如:
<bean name="triangle" class="com.thomson.learn.spring.triangle">
<property name="name" value="easy" />
</bean>
编辑以回复您的评论:如果“名称”是 type shape
,那么您需要在shape
此处注入...
<bean name="triangle" class="com.thomson.learn.spring.triangle">
<property name="name" ref="shape" />
</bean>
<bean name="shape" class="com.thomson.learn.spring.shape">
<!-- configure properties here -->
</bean>
Spring连接的对象应该是JavaBeans。这在实践中意味着它们有一个无参数的构造函数和一组属性,每个属性都有一个 getter 和一个 setter。当您编写上述定义时,Spring 使用 setter 来设置您在配置文件中定义的属性。
例如,如果Shape
是这样的类:
package com.thomson.learn.spring.Shape;
class Shape {
private String name;
public Shape() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后你可以用以下方式连接它:
<bean id="myShape" class="com.thomson.learn.spring.Shape">
<property name="name" value="blah" />
</bean>
这实际上转化为 Spring 在运行时执行以下操作:
Shape myShape = new Shape();
shape.setName("blah");
这就是它的全部内容,除了属性当然也可以是其他类的更复杂的实例,这就是为什么您可以使用ref
引用另一个 bean 的属性。
PS:Spring在很多情况下可以使用反射来注入值,所以它实际上并不需要setter,但是出于各种原因,大多数人都是这样实现他们的bean的。