// =============== 划重点 ===============
// 1. 获取核心容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext(“bean.xml”);
// ApplicationContext ac = new FileSystemXmlApplicationContext(“xxx”); // 这里填写配置文件,在你本机上的物理地址,很少用户
// 2. 根据 id 获取 Bean 对象 (方式一)
IAccountService as = (IAccountService) ac.getBean(“accountService”);
System.out.println(as);
as.saveAccount();
//2. 根据 id 获取 Bean 对象 (方式二)
// IAccountDao adao = ac.getBean(“accountDao”, IAccountDao.class);
// as.saveAccount();
// System.out.println(adao);
}
}
运行结果:
我们没有使用 传统的方式,接用 Spring 框架完成了 bean 的实例化
2.2 使用 setter 完成注入
2.2.1 使用 setter 完成依赖注入的功能
涉及的标签:property
出现的位置:bean 标签的内部
标签的属性:
name:用于指定注入时所用的 set 方法名称
== 以上三个用于指定给构造函数中哪个参数赋值 ==
value: 用于给基本类型和 String类型的数据
ref:用于指定其它的 bean 类型数据,它指的就是 spring IOC 核心容器中出现过的 bean 对象
2.2.2 基于 setter 完成依赖注入的分析
- 优势:
创建对象时没有明确的限制,可以直接使用默认构造函数
- 弊端:
如果某个成员必须有值,则获取对象可能 set 方法没有执行
有了前面的内容做铺垫,接下来做 setter 注入就会轻松很多,我们需要做如下步骤
- 在 bean.xml 添加依赖
- 编写 IAccountServiceImpl2
package com.itheima.service.impl;
import com.itheima.service.IAccountService;
import java.util.Date;
/**
-
setter 注入
-
*/
public class IAccountServiceImpl2 implements IAccountService {
private String name;
private Integer age;
private Date birthday;
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return “IAccountServiceImpl2{” +
“name='” + name + ‘’’ +
“, age=” + age +
“, birthday=” + birthday +
‘}’;
}
public void saveAccount() {
System.out.println(“service 中的 saveAccount 方法执行了”);
}
}
- Client 内容修改
package com.itheima.client;
import com.itheima.service.IAccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
-
模拟一个表现层,用于调用业务层
-
*/
public class Client {
public static void main(String[] args) {
// 1. 获取核心容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext(“bean.xml”);
// 2. 根据 id 获取 Bean 对象 (两种方式)
IAccountService as = (IAccountService) ac.getBean(“accountService2”);
System.out.println(as);
as.saveAccount();
}
}
- 效果图(数据成功通过 setter 注入)
2.2.3 基于 setter 注入的简化操作
约束新增 p 标签
<?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:p=“http://www.springframework.org/schema/p”
xsi:schemaLocation="http://www.springframework.org/schema/beans
ht