文章目录
- 一、Spring
- 1、Spring相关概念
- 1.1 Spring Framework系统架构
- 1.2 核心概念(lOC、lOC容器、Bean、DI)
- 2、入门案例
- 2.1 IOC入门案例
- 2.2 DI入门案例
- 3、lOC相关内容
- 3.1 bean配置
- 3.2 bean实例化
- 3.3 bean的生命周期
- 3.3.1 控制bean生命周期执行的方法
- 3.3.2 bean销毁时机
- 4、DI相关内容
- 4.1 Setter注入
- 4.2 构造器注入
- 4.3 依赖注入方式选择
- 4.4 自动装配
- 4.5 集合注入
- 5、案例:数据源对象管理
- 5.1 基本配置
- 5.2 加载properties文件
- 6、容器(补充)
- 6.1 创建容器
- 6.2 获取bean的方式
- 6.3 容器类层次结构图
- 6.4 BeanFactory
- 7、注解开发
- 7.1 注解开发定义bean
- 7.2 纯注解开发
- 7.3 bean管理
- 7.4 依赖注入
- 7.4.1 自动装配(@Autowired、@Qualifiler、@Value)
- 7.4.2 读取properties文件(@PropertySource)
- 7.5 第三方bean管理
- 7.5.1 第三方bean管理(@Bean)
- 7.5.2 第三方bean依赖注入(引用类型:方法形参,简单类型:成员变量)
- 7.6 XML配置与注解配置比较
- 8、Spring整合MyBatis
- 9、Spring整合junit
- 10、AOP
- 10.1 AOP入门案例
- 10.2 AOP工作流程
- 10.3 切入点表达式
- 10.4 AOP通知类型
- 10.5 AOP案例
- 10.6 AOP通知获取数据
- 二、SpringMVC
- 三、Maven高级
- 四、SpringBoot
- 五、MyBatisplus
一、Spring
1.Spring两大特征:
- 简化开发,降低企业级开发的复杂性
- 框架整合,高效整合其它技术,提高企业级应用开发与运行效率
2.Spring家族(Spring全家桶):
Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能Spring Frameword、Spring Boot、Spring Cloud
1、Spring相关概念
1.1 Spring Framework系统架构
1.Spring Framework
Spring Framework 是Spring生态圈中最基础的项目,是其他项目的根基
2.Spring系统架构图:
3.Spring框架学习路径
1.2 核心概念(lOC、lOC容器、Bean、DI)
1.代码书写现状:
- 耦合度偏高
2.解决方案:
- 使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象
3.IoC(Inversion of Control)控制反转:
- 对象的创建控制权由程序转移到 外部,这种思想称为控制反转
(使用对象时,由主动 new 产生对象转换为由 外部 提供对象,此过程中对象创建控制权由程序转移到 外部,此思想称为控制反转)
3.Spring技术对Ioc思想进行了实现
- Spring提供了一个容器,称为 IoC容器,用来充当IoC思想中的 “外部”
- Ioc容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在 Ioc容器 中统称为 Bean
4.DI(Dependency Injection)依赖注入
- 在容器中建立 bean 与 bean 之间的依赖关系的整个过程,称为依赖注入
目标:充分解耦
- 使用IoC容器管理 bean(IoC)
- 在Ioc容器内将有依赖关系的 bean 进行关系绑定(DI)
最终效果:
- 使用对象时不仅可以直接从 IoC容器 中获取,并且获取到的 bean 已经绑定了所有的依赖关系
2、入门案例
2.1 IOC入门案例
1.管理什么?(Service与Dao)
2.如何将被管理的对象告知 Ioc容器?(配置)
3.被管理的对象交给IoC容器,如何获取到Ioc容器?(接口)
4.IoC容器得到后,如何从容器中获取bean?(接口方法)
5.使用Spring时导入哪些坐标?(pom.xml)
1.导入spring坐标(pom.xml)
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
2.创建 spring配置文件(applicationContext.xml),配置对应类作为 spring 管理的 bean
3.初始化容器(spring核心容器/spring容器),通过容器获取 bean
2.2 DI入门案例
1.基于IoC管理bean
2.Service中使用new形式创建的Dao对象是否保留?(否,不保留)
3.Service中需要的Dao对象如何进入到Servicer中?(提供方法)
4.Service与Dao间的关系如何描述?(配置)
1.删除使用 new 的形式创建对象的代码,并提供依赖对象对应的 setter 方法:
2.配置 service 与 dao 之间的关系:
3、lOC相关内容
3.1 bean配置
0、基础配置:
1、bean 别名配置:
2、bean 作用域配置:
适合交给容器进行管理的bean:
- 表现层对象
- 业务层对象
- 数据层对象
- 工具对象
不适合交给容器进行管理的bean
- 封装实体的域对象
3.2 bean实例化
实例化 bean 的三种方式:
bean本质上就是对象,创建bean使用构造方法完成
方式一、构造方法(常用)
无参构造方法如果不存在,将抛出异常 BeanCreationException
方式二、静态工厂(了解)
方式三、实例工厂(了解)
方式四、FactoryBean(实用)
3.3 bean的生命周期
生命周期:从创建到消亡的完整过程
bean生命周期:bean从创建到销毁的整体过程
bean生命周期控制:在bean创建后到销毁前做一些事情
bean初始化所经历的阶段:● 初始化容器
1.创建对象(内存分配)
2.执行构造方法
3.执行属性注入(set操作)
4.执行bean初始化方法
● 使用bean
1.执行业务操作
● 关闭/销毁容器
1.执行bean销毁方法
3.3.1 控制bean生命周期执行的方法
方法一
方法二、接口控制(了解)
3.3.2 bean销毁时机
4、DI相关内容
依赖注入方式:
(依赖: 一个对象的运行需要另一个对象)
&.思考:向一个类中传递数据的方式有几种?
- 普通方法(set方法)
- 构造方法
&.思考:依赖注入描述了在容器中建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字或字符串呢?
- 引用类型
- 简单类型(基本数据类型与String)
&.依赖注入方式
- setter注入
简单类型
引用类型- 构造器注入
简单类型
引用类型
4.1 Setter注入
提供可访问的 set 方法
&、Setter注入–引用类型:
&、Setter注入–简单类型:
&、也可以为一个类配置多个依赖:
<?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="bookDao" class="com.eve.dao.impl.BookDaoImpl" >
<property name="databaseNum" value="mysql" />
<property name="connectionNum" value="10" /><!-- spring内部会自动转成对应的类型 -->
</bean>
<bean id="bookDao2" class="com.eve.dao.impl.BookDaoImpl2" />
<bean id="bookService" class="com.eve.service.impl.BookServiceImpl" >
<property name="bookDao" ref="bookDao" />
<property name="bookDao2" ref="bookDao2" />
</bean>
</beans>
4.2 构造器注入
&、构造器注入–引用类型
&、构造器注入–简单类型
&、构造器注入–参数匹配(了解)
4.3 依赖注入方式选择
1. 强制依赖(必要的) 使用构造器进行,使用setter注入有概率不进行注入导致ulI对象出现
2. 可选依赖使用 setter 注入进行,灵活性强
3. Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨
4. 如果有必要可以两者同时使用,使用构造器注入完成强依赖的注入,使用setteri注入完成可选依赖的注入
5. 实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter?方法就必须使用构造器注入
6. 自己开发的模块推荐使用setter注入
4.4 自动装配
Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
自动装配方式:
按类型(常用)
按名称
按构造方法
不启用自动装配
依赖自动装配特征:
- 自动装配用于引用类型依赖注入,不能对简单类型进行操作
- 使用按类型装配时 (byType) 必须保障容器中相同类型的bean唯一,推荐使用
- 使用按名称装配时 (byName) 必须保障容器中具有指定名称的bean,因变量名与配置耦合,推荐使用
- 自动装配优先级低于 setteri 注入与构造器注入,同时出现时自动装配配置失效
4.5 集合注入
5、案例:数据源对象管理
5.1 基本配置
数据库连接池:
mysql数据库连接驱动坐标:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
5.2 加载properties文件
<?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:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
https://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
">
<context:property-placeholder location="classpath*:*.properties" system-properties-mode="NEVER" /><!-- 还可以从另的工程框架中读取 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="bookDao" class="com.eve.dao.impl.BookDaoImpl">
<property name="name" value="${username}" />
</bean>
</beans>
6、容器(补充)
6.1 创建容器
6.2 获取bean的方式
6.3 容器类层次结构图
6.4 BeanFactory
7、注解开发
7.1 注解开发定义bean
定义:
分类(只是为了方便我们区分):
7.2 纯注解开发
Spring.3.o升级了纯注解开发模式,使用]ava类替代配置文件,开启了Spring快速开发赛道
Java类代替了Spring核心配置文件:
@Configurationi注解用于设定当前类为配置类配置ComponentScan注解使用,一个类如: JdbcConfig要定义为配置类时,需要加上@Configuration,此时 ComponentScan 就会扫描到,若不进行这样做,也可以使用 @Import 导入)
@ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式
@ComponentScan({“com.itheima.service”,“com.itheima.dao”})
读取Spring核心配置文件初始化容器对象切换为读取 Java配置类初始化容器对象
7.3 bean管理
7.4 依赖注入
7.4.1 自动装配(@Autowired、@Qualifiler、@Value)
7.4.2 读取properties文件(@PropertySource)
7.5 第三方bean管理
7.5.1 第三方bean管理(@Bean)
该方法添加 @bean 注解后,此方法返回的 bean 将交给 spring 管理
&、不建议写在 SpringConfig中
建议
不建议
7.5.2 第三方bean依赖注入(引用类型:方法形参,简单类型:成员变量)
依赖注入:简单类型与引用类型
7.6 XML配置与注解配置比较
8、Spring整合MyBatis
9、Spring整合junit
10、AOP
AOP(Aspect Oriented Programming): 面向切面编程,一种编程范式,指导开发者如何组织程序结构
- OOP(Object Oriented Programming): 面向对象编程
作用:在 不惊动原始设计 的基础上为其进行 功能增强
Spring理念:无入侵式/无侵入式
切入点就是要增强的方法,通知就是增强的内容。切面描述的是在哪个切入点上执行哪些通知
10.1 AOP入门案例
10.2 AOP工作流程
目标对象(Target): 原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的
代理(Poy): 目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现
10.3 切入点表达式
切入点:要进行增强的方法
切入点表达式:要进行增强的方法的描述方式
10.4 AOP通知类型
10.5 AOP案例
10.6 AOP通知获取数据
获取参数
获取返回值
获取异常
二、SpringMVC