Construct注入


现在有一个 Person 类和一个依赖它的 Service

  1. package com.skyline.model;
  2. public class Person {
  3. private String name;
  4. public String getName() {
  5. return name;
  6. }
  7. public void setName(String name) {
  8. this.name = name;
  9. }
  10. }
public class MyServiceImpl implements MyService {

    private Person person;

    private String greeting;

    public MyServiceImpl(Person person, String greeting)
    {
        this.person = person;
        this.greeting = greeting;
    }

    @Override
    public String sayHello() {
        return this.greeting + " " + this.person.getName();
    }
}

然后 bean.xml :

<?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="aPerson" class="com.skyline.model.Person">
      <property name="name" value="Chester"/>
    </bean>

    <bean id="myService" class="com.skyline.service.MyServiceImpl">
      <constructor-arg ref="aPerson"/>
      <constructor-arg type="java.lang.String" value="Hello"/>
    </bean>

</beans>

Setter注入


通过 setXxx 来注入, 上例中的 Person 就是

public class MyServiceImpl implements MyService {

    private Person person;

    private String greeting;

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    public String getGreeting() {
        return greeting;
    }

    public void setGreeting(String greeting) {
        this.greeting = greeting;
    }

    @Override
    public String sayHello() {
        return this.greeting + " " + this.person.getName();
    }
}

配置文件:

<bean id="aPerson" class="com.skyline.model.Person">
  <property name="name" value="Chester"/>
</bean>

<bean id="myService" class="com.skyline.service.MyServiceImpl">
  <property name="person" ref="aPerson"/>
  <property name="greeting" value="Hello"/>
</bean>