Spring
一、什么是Spring框架?(重要) ---对Spring的理解
记忆关键字:1.核心思想(IOC、AOP) 2.作用(解耦、简化) 3.简单描述框架组成
答:定义:Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。
核心思想:核心是IOC(控制反转)和 AOP(面向切面编程)
作用:用于组件之间的解耦,以及简化第三方JavaEE中间技术的使用(JMS、任务调度、缓存、ORM框架)。
框架组成:IOC容器、Validation数据校验、AOP面向切面编程、Transactions事务管理、Spring JDBC、Spring MVC框架、以及各类第三方JavaEE中间件技术集成。
二、Spring框架由哪些模块组成?(重要)
记忆关键字:官方文档描述,由7个模块组成
答:Spring Framework 根据官方文档的描述,主要包括以下常用5个模块:
1.Core:核心模块
包括:IOC Container(loc容器),Events(事件通知机制)、Resources(资源加载机制)、i18n(国际化)、Validation(数据校验)、Data Binding(数据绑定)、Type Conversion(类型转换),SpEL(Spring表达式)、AOP(面向切面编程)
2.Testing:测试模块
包括:Mock 0biects(测试模拟对象),TestContext Framework(测试框架),Spring MVCTest(用于测试Spring Mvc),webTestclient(用于测试 Webclient、Restful、 webflux 等);
3.Data Access:数据访问模块包括:Transactions(事务管理),DA0support(统一的 Data Access 0bject DA0 模式封装),JDBc(Spring对于DC的操作封装),0/RMapping(Spring 对于对象关系映射框架的封装,例如 Hibernate等框架)等;
4.Web Servlet:基于Servlet的Web应用开发
包括:Spring MVc( Spring 基于 MVC 模式设计封装的 Web框架),Websocket(Spring集成 Websocket,websocket 是一个服务器与客户端双向通信的技术)等;
5.Integration:企业级系统集成模块(不同系统之间的交互集成)
包括:Remoting(spring 用于在分布式系统中进行远程服务调用的通讯框架),IMS(Spring集成各类Java消息中间件、Java消息服务[JavaMessage Service]、例如ActiveMQ等),Java Emai1(邮件发送),Tasks Scheduling(任务调度);
三、Spring环境搭建
(1)坐标 (2)配置文件
例:配置MySQL
<!--坐标-->
<dependencies>
<dependency>
<!--mysql-->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
<!--配置文件-->
msg1=com.mysql.cj.jdbc.Driver
msg2=jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT
msg3=root
msg4=123456
SpringIOC
一、什么是Spring IOC?(重要) ---对Spring IOC的理解
记忆关键字:IOC名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系。
IOC(Inversion of Control,中文释义:控制反转),是Spring框架的核心思想之一,主要用于解耦。
IOC是指将创建对象的控制权转移给Spring框架进行管理,由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松耦合的关系,实现解耦。
控制:指的是对象的创建(实例化、管理)的权利
反转:控制权交给外部环境(Spring框架、IOC容器)
二、 Spring IOC容器的理解(重要)
记忆关键字:IOC容器的作用、存储形式、初始化过程
1.I0C 通常被理解为I0C Container 容器,I0C 容器其实就是一个 Map,key 是每个 bean 对象的ID,value 是bean 对象本身。IOC 容器负责创建 bean 对象并管理 bean 的生命周期并且根据配置好配置文件或注解,管理 I0C 容器中的每个 bean ,以及根据 bean 之间的依赖关系,完成 bean 之间的注入。
2.IOC 容器属于 Spring core 模块,用来创建和管理 Bean ,默认使用单例的方式将 bean 存储在DefaultListableBeanFactory 类的 beanDefinitionMap中(-个 ConcurrentHashMap 类型的Map集合);
3.IOC 容器使用 ConcurrentHashMap 集合存储了 BeanDefinition 对象,该对象封装了 Spring对一个 Bean 所有配置信息,包括: 类名,属性,构造方法参数,依赖,是否延迟加载,是否是单例等配置信息;
三、Spring IOC实现步骤(重要)
(1)找到需要以解耦方式获取实例对象的类
(2)将需要spring管理的类注入spring容器
<bean id = "唯一标识" class="类"></bean>
(3)向spring容器中索取java实例(解耦)
- 加载spring核心配置文件,获取spring容器对象
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("beans.xml");
- 获取对象
Student student = (Student)applicationContext.getBean("student")
例:
(1)找到需要以解耦方式获取实例对象的类-----Student类、Date类、IUserDaoImpl实体类
Student 类
package com.apesource.pojo;
public class Student {
}
IUserDaoImpl 类
package com.apesource.dao;
public class IUserDaoImpl implements IUserDao {
@Override
public void save() {
System.out.println("======dao新增方法======");
}
}
Date无需手动定义,Java.util.Date
(2)将需要spring管理的类注入spring容器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 注入类-->
<bean id="student" class="com.apesource.pojo.Student"></bean>
<!-- 注入类-->
<bean id="dao" class="com.apesource.dao.IUserDaoImpl"></bean>
<!-- 注入日期类-->
<bean id="date" class="java.util.Date"></bean>
</beans>
(3)向spring容器中索取java实例(解耦)
- 加载spring核心配置文件,获取spring容器对象
- 获取对象
public class Test01 {
public static void main(String[] args) {
//1.加载spring核心配置文件,获取spring容器对象
BeanFactory applicationContext = new ClassPathXmlApplicationContext("beans.xml");
//2.获取对象
Student student = (Student) applicationContext.getBean("student");
System.out.println(student);
IUserDao dao= (IUserDao)applicationContext.getBean("dao");
System.out.println(dao);
dao.save();
Date date = (Date)applicationContext.getBean("date");
System.out.println(date);
}
}