Spring的IOC从入门到深入
1.分析下面代码开发中存在的问题:2. 针对上述代码存在的问题,我们该解决,
第一步: 将耦合类配置到xml文件中, 比如: beans.xml第二步: 创建容器对象,加载配置文件,创建对象存储到容器中第3步: 测试 4. 总结5. 下面我们看下spring框架的IOC是如何实现的
第一步: 在创建的maven项目中,导入spring-webmvc依赖第二步: 创建spring配置文件第三步: 使用spring核心对象,获取容器中的bean对象 6. 对比spring框架的核心 与自定义的容器7. Spring的注解开发8. Spring整合junit进行单元测试
Spring的IOC从入门到深入 1.分析下面代码开发中存在的问题: 2. 针对上述代码存在的问题,我们该解决,解决方案是: 将测试类与接口的耦合,通过第三方容器来解决
实现步骤分为两步:
第二步: 创建容器对象,加载配置文件,创建对象存储到容器中
public class MyApplicationContext {
//1.引入被加载的xml文件
private String resourcesXml;
//2.创建容器对象, 就是map, 底层是线程安全的map
private static Map
第3步: 测试
public class Demo {
public static void main(String[] args) {
//1.创建核心对象:
//核心对象使用类加载器加载配置文件,
// 类加载器文件在resources根目录下面,所以和beans.xml同一级目录(相对路径写法)
MyApplicationContext map =
new MyApplicationContext("beans.xml");
//2.根据id属性值: 获取bean对象,这个方法没有使用泛型,需要强转
//解耦合: 看不到Demo类与 Pet接口,或者Dog实现类有耦合关系
Pet pet = (Pet)map.getBean("dog");
//3.根据class值: 获取bean对象,这个方法使用了泛型,不用强转
Pet pet2 = map.getBean(Dog.class);
pet.hello();
pet2.hello();
}
}
4. 总结
5. 下面我们看下spring框架的IOC是如何实现的
第一步: 在创建的maven项目中,导入spring-webmvc依赖
org.springframework spring-webmvc 5.1.16.RELEASE
依赖解释:
第三步: 使用spring核心对象,获取容器中的bean对象
public class Demo2 {
public static void main(String[] args) {
//1.创建容器对象
//在这里: 为什么直接写文件名称, 因为底层是类加载器加载spring配置文件的
//类加载器在resources根目录下面: 和spring.xml同一级目录
ApplicationContext map = new ClassPathXmlApplicationContext("spring.xml");
//2.根据类的名称获取对象: 这个方法没有使用泛型,必须强转
Pet pet = (Pet)map.getBean("dog");
//3.根据Class获取对象: 这个方法使用泛型,不用强转
Pet pet2 = map.getBean(Dog.class);
}
}
6. 对比spring框架的核心 与自定义的容器
通过下图我们能分析到一下三点:
Spring框架底层是通过类加载器加载spring的配置文件的,类加载器的位置在resources的根目录下面
所以和配置文件同一级目录,直接写目录名称
Spring框架的容器底层就是一个map集合
Spring容器在存储对象有两种方式
第一: 根据类名,存储该类的对象
第二:根据类的class字节码,存储该类的对象
核心思路:
- 通过注解替代配置文件, Spring框架中配置自动扫描包机制,根据扫描的类,创建对象,存到容器中.Spring容器通过注解开发时,在存储对象依然是下面的两种方式
第一: 根据类名,存储该类的对象
第二:根据类的class字节码,存储该类的对象Spring的DI依赖注入: 其实就是给当前类的成员变量(成员属性)赋值
常见DI注入方式有两种:
通过构造方法DI依赖注入
*比如:
通过set方法DI依赖注入
比如:
略



