[TOC]
# 注入对象
在上例中,对Category的name属性注入了"category 1"字符串
在本例中 ,对Product对象,注入一个Category对象。
## 步骤 1 : 先运行,看到效果,再学习
先将完整的 spring 项目(向老师要相关资料),配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。
## 步骤 2 : 模仿和排错
在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。
模仿过程难免代码有出入,导致无法得到期望的运行结果,此时此刻通过比较**正确答案** ( 可运行项目 ) 和自己的代码,来定位问题所在。
采用这种方式,**学习有效果,排错有效率**,可以较为明显地提升学习速度,跨过学习路上的各个槛。
## 步骤 3 : Product.java
Product类中有对Category对象的setter getter
> 产品带有类别属性,一个产品只属于一个类别。
~~~
package com.dodoke.pojo;
public class Product {
private int id;
private String name;
private int number;
private double price;
private Category category;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
}
~~~
## 步骤 4 : applicationContext.xml
在创建Product的时候注入一个Category对象
注意,这里要使用ref来注入另一个对象
~~~
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean name="c" class="com.dodoke.pojo.Category">
<property name="name" value="category 1" />
</bean>
<bean name="product" class="com.dodoke.pojo.Product">
<property name="name" value="Apple Watch" />
<property name="number" value="2" />
<property name="price" value="8800" />
<property name="category" ref="c" />
</bean>
</beans>
~~~
> property后面紧跟着的name是类中对象的属性name。
## 步骤 5 : TestSpring
~~~
package com.dodoke.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.dodoke.pojo.Category;
import com.dodoke.pojo.Product;
public class TestSpring {
public static void main(String[] args) {
// 读取applicationContext.xml配置文件
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
// 在xml文件中,bean标签的name是c,获取到name为c的bean标签里面的内容强转为Category类型
Category c = (Category) context.getBean("c");
System.out.println(c.getName());
Product product = (Product) context.getBean("product");
System.out.println(product.getName());
System.out.println(product.getNumber());
System.out.println(product.getPrice());
System.out.println(product.getCategory().getName());
}
}
~~~
通过Spring拿到的Product对象已经被注入了Category对象了。
运行结果如下:
![](../images/Image006.png)
> 重点关注:一个类的成员变量有引用类型的变量的时候,这个引用类型的变量如何初始化,通过ref引入。