一、Spring简介
💬概述:Spring 是轻量级的开源的JavaEE框架,IOC和AOP是Spring 的两个核心部分
轻量级:Spring 需要配置的依赖(jar 包)较少,也不需要额外添加其他依赖,整体体积也较小,可以独立使用
🎯目的:简化企业应用开发
🔑特点:
- 方便解耦,简化开发
- 支持AOP编程(不修改源码就能实现功能扩展)
- 方便程序测试和事务管理操作
- 方便与其他框架进行整合,如整合 MyBatis
- 简化 JavaAPI 的使用
二、IOC
2.1 简介
💬概述:Inversion Of Control 控制反转,意思就是将对象的创建权反转(交给)了Spring,或者说对象创建的控制权不是"使用者",而是"框架"或者"容器"
🎯作用与目的:
- 简化操作:将对象的创建和对象之间的调用交给Spring处理
- 降低耦合度:对象之间的调用操作采用工厂模式间接实现,从而降低两个对象之间调用的耦合度
2.2 底层原理
🔑底层实现技术:xml 解析、工厂模式、反射
🔑IOC 实现过程:IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
-
创建对象(以xml 配置为例):在xml 配置文件中配置将要创建的对象
<bean id="uDao" class="com.Key.dao.UserDao"></bean>
-
创建工厂类:在工厂类中解析xml 文件和通过反射创建对象
public class UserFactory { public static UserDao getUserDao() { // 1. 解析xml文件,获取对应的class属性值,此处简略具体代码... String classValue = class属性值...; // 2. 通过反射创建对象 UserDao uDao = (UserDao)Class.forName(classValue).newInstance(); return uDao; } }
🔑IOC 底层中的工厂模式
2.3 获取对象的API
🔑 接口
① BeanFactory
- IOC容器的基本实现,是Spring内部使用的接口,开发人员一般不使用
- 特点:加载配置文件时不会创建对象,在获取对象时才创建
② ApplicationContext
(推荐)
-
BeanFactory
接口的子接口,提供更强大的功能,一般由开发人员使用 -
特点:在加载配置文件的时候就已经创建好对象
❓为什么使用ApplicationContext会更好:配置文件、创建对象等操作比较耗时耗资源,所以一般将这些操作放在项目启动(服务器启动)前完成,项目启动后就可以直接使用,而不是等到要使用时才来创建
📚常见八股文:BeanFactory
和ApplicationContext
的区别
🔑对应实现类
FileSystemXmlApplicationContext
:传入参数为文件的全路径,即在磁盘中的位置ClassPathXmlApplicationContext
:传入参数为文件在项目中src的类路径,如果放在src目录下,直接写文件名即可
// 加载spring配置文件(xml),创建工厂类对象
// 1. 方式一
BeanFactory context01 = new ClassPathXmlApplicationContext("bean01.xml");
// 2. 方式二
ApplicationContext context02 = new ClassPathXmlApllicationContext("bean01.xml");
🔑获取对象
/*
根据创建的工厂类对象context,获取对应对象
- 第一个参数:xml文件中<bean>标签的id属性值
- 第二个参数:需要获取的对象对应的Class对象(如果不写,返回对象类型默认是Object)
*/
UserDao userDao = context.getBean("uDao", UserDao.class);