2

我是 Spring 新手,我有一个小要求。

<bean name="triangle" class="com.thomson.learn.spring.triangle">
    <property name="name" ref="dataSource" />
</bean>

<bean id="dataSource" class="java.lang.String">
    <property name="name" value="easy" />
</bean>

我写了如上所示的bean。我需要使用easybean 从 bean访问值id="triangle",但是当我尝试这样做时,我得到了一个异常。有人可以建议如何克服这个问题吗?

4

3 回答 3

0

字符串没有属性“名称”,因此您无法以您尝试的方式实例化一个。此外,您不需要,因为您可以直接将其用作值,例如:

<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的。

于 2012-04-25T12:31:00.113 回答
0

尝试以下操作:

<bean name="triangle" class="com.thomson.learn.spring.triangle">
        <property name="name" ref="dataSource" />
</bean>

<bean id="dataSource" class="com.thomson.learn.spring.shape">
    <property name="name" value="easy" />
</bean>

wherecom.thomson.learn.spring.triangle并且com.thomson.learn.spring.shape必须作为项目中的类存在。您的String类 bean 无法工作,因为String没有要访问的name属性(getName()方法 getter)。

于 2012-04-25T13:41:16.697 回答
0

如果要注入所有 bean 的字符串,您可以从属性文件中引用属性并使用<context:property-placeholder location="location to .properties"/> ,或者您可以在配置 xml 中定义属性<util:properties />

属性占位符示例

<bean id="appDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/> // Refered from property file
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

    <context:property-placeholder location="classpath:jdbc.properties"/>
于 2012-04-25T17:22:02.240 回答