# 对象依赖注入

在 第一个 Spring IoC 应用中我们定义了两个类 Apple 和 Child， 其关系是 小孩吃苹果， 那么我们需要先声明一个苹果对象，再将这个苹果对象传入到 小孩对象中，这就是依赖注入，小孩对象需要拿到 苹果对象。对象

### 基于 setter 方法依赖注入

在 applicationContext.xml 文件中添加下面两个 bean. 第一个 bean 定义了一个 sweetApple 对象，通过property 标签 调用对应的 setter 方法 对 成员属性进行注入。第二个  bean 定义了 一个 lily 对象，还是利用 property 标签调用对应的setter 方法对成员属性进行注入。特别的是 lily 对象需要拿到 sweetApple 对象，用到了 property 标签内的 ref 属性进行获取，传入 需要拿到的对象 bean id 即可。

```xml
    <!-- 通过 setter 实现对象属性注入 -->
    <bean id="sweetApple" class="indi.chester.spring.ioc.entity.Apple">
        <!-- Ioc 容器自动利用反射机制在运行时吊桶 setter 方法为属性赋值 -->
        <property name ="title" value="红富士"/>
        <property  name="color" value="红色"/>
        <property  name="origin" value="欧洲"/>
        <property  name="price" value="9.9"/>
    </bean>

    <!-- 通过 setter 实现对象注入 -->
    <bean id="lily" class="indi.chester.spring.ioc.entity.Child">
        <property name="name" value="Lily"/>
        <!-- 注入依赖对象 -->
        <property name="apple" ref="sweetApple"/>
    </bean>
```

### 基于构造方法进行注入对象

在 applicationContext.xml 文件中添加下面两个 bean. 其中第一个 bean 是利用 setter 方法实现对象属性注入。另一个bean 用到了 constructor-arg 标签，调用了对应的构造方法实现依赖注入。

```xml
<!-- 通过 setter 实现对象属性注入 -->
    <bean id="sourApple" class="indi.chester.spring.ioc.entity.Apple">
        <!-- Ioc 容器自动利用反射机制在运行时吊桶 setter 方法为属性赋值 -->
        <property name ="title" value="青苹果"/>
        <property  name="color" value="绿色"/>
        <property  name="origin" value="中亚洲"/>
        <property  name="price" value="7.9"/>
    </bean>

    <!-- 通过 构造方法实现依赖 注入 -->
    <bean id="tom" class="indi.chester.spring.ioc.entity.Child">
        <constructor-arg name="name" value="Tom"/>
        <constructor-arg name="apple" ref="sourApple"/>
    </bean>
```
