Spring重点知识总结(一)

前言

        本文为基于 狂神说Java 及 黑马视频 的 Spring 的学习笔记,附自己的学习理解,欢迎小伙伴们一起讨论(未更完)。

1 简介

Spring 是一个轻量级控制反转(IoC)和 面向切面(AOP)的容器框架

【注】既然是一个容器,那么它内部存储的是对象

 Spring 官网:https://spring.io/projects/spring-framework#overview

1.1 发展史

2002年,推出了Spring 框架的雏形:interface 21框架

2004年3月24日,正式发布了1.0版本

创始人:Rod Johnson (挺厉害的音乐学博士、感兴趣的可自行搜索)

1.2 功能

简化开发:降低企业级开发的复杂性,使之可以适用于任何的 Java 应用,而不仅仅限于服务器端开发

体现在 IoC(控制反转) 、AOP(面向切面)中的事务管理中

框架整合:高效整合其他技术,提高企业级应用开发

如 MyBatis、Mybatis-plus 等

1.3 优点

1、是一个开源、免费的框架(容器),方便地管理和配置应用程序中的组件。

2、轻量级、非入侵时框架、可快速构建应用程序

非入侵式:不会对原来的项目产生影响

3、面向切面编程(AOP):提供 cross-cutting concerns 的功能,如事务管理、安全性等

4、依赖注入(DI):用 DI 实现松耦合,让应用程序更加灵活和可维护

5、集成多种技术:可以与许多其他技术和框架集成,如 ORM 框架、Web 框架等,十分灵活

1.4 Spring的七大模块

Spring重点知识总结(一)_第1张图片

        组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现,每个模块的功能如下(也可以直接往下滑看总结的思维导图):

Spring AOP :

        通过配置管理特性,Spring AOP 模块将直接面向切面的编程功能,集成到了 Spring 框架中,所以可以很容易的使 Spring 框架管理任何支持 AOP 的对象。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中。

Spring ORM:

        Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

Spring DAO:

        JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring Web:

        Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作

Spring Context:

        一个配置文件,向 Spring 框架提供上下文信息,包括企业服务,例如 JNDI 、EJB 、电子邮件、国际化、校验和调度功能。

Spring Web MVC :

        MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI

Spring Core : 

        提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory ,是工厂模式的实现。beanfactory 使用控制反转 (IOC)模式 将应用程序的配置和以来性规范与实际的应用程序代码分开。

总结如下:

Spring重点知识总结(一)_第2张图片

1.5 拓展

        现代化的Java 开发!其实就是基于Spring的开发

Spring重点知识总结(一)_第3张图片

- Spring Boot :

        ① 一个快速开发的脚手架

        ② 基于SpringBoot 可以快速开发单个微服务

        ③ 约定大于配置!

- Spring Cloud :

        SpringCloud 基于SpringBoot实现的,是一系列框架的有序集合

        现在大多数公司都在使用SpringBoot进行快速开发,学习 SpringBoot 的前提,需要完全掌握Spring和SpringMVC

        弊端:Spring 发展了太久,融合了很多其他框架,导致配置十分繁琐,“配置地狱”

2 IOC本质

        控制反转IoC(Inversion of Control)是一种设计思想,DI(依赖注入)是实现 IoC 的一种方法。在没有 IoC 的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方(即Spring)

Spring重点知识总结(一)_第4张图片

【注】IoC 是 Spring 框架的核心内容,使用多种方式实现了IoC:

① 使用XML配置;② 使用注解;③ 零配置实现。后续将一 一讲解。

Spring重点知识总结(一)_第5张图片

Spring重点知识总结(一)_第6张图片

3 IOC 入门案例

思考:

Spring重点知识总结(一)_第7张图片

 实现:

Spring重点知识总结(一)_第8张图片

Spring重点知识总结(一)_第9张图片

Spring重点知识总结(一)_第10张图片

Spring重点知识总结(一)_第11张图片

【注】

bean 标签标示配置 bean

id 属性表示给 bean 起名字

class 属性表示给 bean 定义类型 

4 DI 入门案例

思考:

Spring重点知识总结(一)_第12张图片

实现:

Spring重点知识总结(一)_第13张图片

Spring重点知识总结(一)_第14张图片

思考:是谁创建的对象?答:set 方法谁调的,就是谁往里面传对象,这里是 Spring 容器

Spring重点知识总结(一)_第15张图片

Spring重点知识总结(一)_第16张图片

【注】

property 标签表示配置当前 bean 的属性

name 属性表示配置哪一个具体的属性

ref 属性表示参照哪一个 bean 

5 IOC创建对象的方式

1、使用无参构造创建对象,默认!

2、假设我们要使用有参构造创建对象

        ① 下标赋值

        ② 通过类型

        ③ 通过参数名直接设置

总结:在配置文件加载的时候,容器中管理的对象就已经初始化了

6 Bean

6.1 Bean的配置

id :new出来的名字,bean的唯一标识符,类似于对象名

class: bean 对象所对应的全限定名 :包名 + 类型

name: 也是别名,比alias更高级,可以同时取多个别名,多个别名之间可以取“, ;”分割

6.1.1 bean 基础配置

Spring重点知识总结(一)_第17张图片

6.1.2 bean 别名配置

Spring重点知识总结(一)_第18张图片

6.1.3 bean 作用范围配置

        作用范围配置指的是控制bean 创建的时候实例的数量到底是一个还是多个

Spring重点知识总结(一)_第19张图片

思考: 

Spring重点知识总结(一)_第20张图片

不适合交给容器进行管理的bean 有哪些特征呢?

这类对象它其实是叫做有状态的,里面会记录一些它的成员变量的一些属性值

6.2 bean 的实例化 

三种实例化方式:

1、bean 的本质上是对象,所以使用构造方法:

Spring重点知识总结(一)_第21张图片

【注】无参构造方法如果不存在,将抛出异常 BeanCreationException 

 2、使用静态工厂造对象(用得少,早些年常用,了解即可)

Spring重点知识总结(一)_第22张图片

3、使用实例工厂造对象(了解)

Spring重点知识总结(一)_第23张图片

 4、对实例工厂的改造(实用),使用 Factory 方法造对象

Spring重点知识总结(一)_第24张图片

6.3 bean 的生命周期

bean的生命周期:bean 从创建到销毁的整体过程

bean的生命周期控制:在 bean 创建后到销毁前做一些事情

控制生命周期的两种方法: 

1、配置 bean 的生命周期:init - method 属性和 destroy - method 的属性

Spring重点知识总结(一)_第25张图片

2、使用接口的方式

Spring重点知识总结(一)_第26张图片

6.4 bean 初始化的过程

初始化容器:

        1.创建对象(内存分配)

        2.执行构造方法

        3.执行属性注入( set 操作)

        4.执行 bean 初始化方法

使用 bean :

        1.执行业务操作

关闭/销毁容器:

        1.执行 bean 销毁方法

【bean 的销毁时机】【了解】

容器关闭前触发 bean 的销毁,才能执行 destroy method 的对应方法

关闭容器的两种方式:

1.手工关闭容器:

ConfigurableApplicationContext 接口 close()操作

ctx.close ();   //直接关闭容器,更为暴力,只能放在所有操作执行完以后

2. 注册关闭钩子,在虚拟机退出前先关闭容器再退出虚拟机:ConfigurableApplicationContext 接口 registerShutdownHook()操作

ctx.registerShutdownHook();  //可以放在任何位置

7 依赖注入

依赖:bean 对象的创建依赖于容器

注入:bean 对象中的所有属性由容器来注入

思考:

Spring重点知识总结(一)_第27张图片

7.1 构造器注入【了解】

引用类型:

Spring重点知识总结(一)_第28张图片

简单类型:

Spring重点知识总结(一)_第29张图片

对上面方法的改进,参数适配: 

Spring重点知识总结(一)_第30张图片

7.2 setter 注入 【重点】

引用类型:

Spring重点知识总结(一)_第31张图片

简单类型:

Spring重点知识总结(一)_第32张图片

7.3 依赖注入方式的选择

Spring重点知识总结(一)_第33张图片

7.4 依赖自动装配

Spring重点知识总结(一)_第34张图片

Spring重点知识总结(一)_第35张图片

Spring重点知识总结(一)_第36张图片

7.5 集合注入

数组:

Spring重点知识总结(一)_第37张图片

List:

Spring重点知识总结(一)_第38张图片

Set:

Spring重点知识总结(一)_第39张图片

Map:

Spring重点知识总结(一)_第40张图片

Properties:

Spring重点知识总结(一)_第41张图片

 案例1:数据源对象管理

        管理第三方传入的 Bean

Spring重点知识总结(一)_第42张图片

8 加载  properties  文件

1、开启 context 命名空间

2、使用context 空间加载 properties 文件

3、使用属性占位符 ${ } 读取 properties 文件中的属性

Spring重点知识总结(一)_第43张图片

Spring重点知识总结(一)_第44张图片

你可能感兴趣的:(Spring,spring,java)