【SSM学习】Spring 学习总结01
前言
Spring 是 Java后端开发最常用的框架之一。那正好呢,最近开始学 Spring 了,因此写下本文,借助本人的新手视角,阐述我个人对于 Spring 基础——IoC的浅显理解。如有差错,请各位大佬纠正补充。
正片开始
Spring 的基本认知
Spring 是 Java企业级开发(Java EE)中常用的轻量级框架,旨在帮助开发者更高效地进行后端系统的开发工作。它将后端开发的核心功能整合至自身生态之中,还支持各种其他框架的调用,极大的减少了开发者对于系统底层配置代码的编写量,使得开发者能够更加聚焦于项目业务的逻辑编写。
想要系统性地学习 Spring,Java SE 的三大基础知识是非常重要的。分别是:
- 多态——面向接口编程思想,方便解耦逻辑
- 注解——Spring体系 大多数的使用方式
- 反射——🌟运行时获取类信息的机制,是 Spring 的核心依赖机制
Java 中支持在编译期结束后,程序运行时动态获取类信息、创建类对象、执行方法的机制,Spring几乎所有功能都依赖其实现
虽然可能在 Java SE 对于反射没有重点讲,但是到了 Spring 的学习,反射非常非常重要
IoC(控制反转)—— Spring 的核心实现
很多朋友在初学 Spring 时,就大概率会对 IoC 有疑惑:何为控制反转?反转给谁? 对此且听我娓娓道来。
在普通的 Java 代码(或者说是面向对象的编程语言)之中,对象在使用前都是需要由程序员手动使用构造方法 new(新建)出来的。那么就会导致一个问题:在对于一些 只有方法,不需要存变量 的类来说,如果有多处使用或者说需要有并发使用的需求时,那么 JVM 内就会出现一堆一模一样的对象来占用内存。于是我们可以只是新建一个对象来使用吧?
对!我们可以全局只使用一个对象(为方便讲述,设置为 对象a)来帮忙处理逻辑。但是有没有想过,如何可以维持在整个项目中使用到单一对象?
这就是个麻烦的地方了。我们不知道在哪里去初始化 对象a(因为可能每次运行项目逻辑都不是先运行同一个方法,必然不清楚哪里建对象)。就算解决了存放问题,明确了有一个类(类C)来存放 对象a,内部有一个初始化方法(方法f)优先在项目启动前期被调用(即直接写在main方法内),也需要在每个使用到 对象a 的地方都引入 类C 并通过 get方法 获取。
这样诚然可行,但是当需要引入的单一对象过多,在 类C 内就多了很多成员变量,以及相同数量的get方法。这样对于管理 类C 是灾难性的,尤其是当这个类需要我们自己管理时,这必然会占用思考核心业务逻辑的思绪去进行“理毛线球”般的管理。
所以,Spring 框架就帮我们做了这件事,自己维护一个容器,并且从我们用户手上拿到对于这些 单一对象 的控制权来实现对象初始化和管理,这就是所谓的 IoC(控制反转)。简单来说就是将我们自己控制的对象管理、初始化的权限交给 Spring 容器。
顺便一提,Spring 的 IoC(控制反转)依赖于 反射 进行运行,通过在运行时获取需要 单一对象 的类信息,并且通过其空参构造方法(自定义或者默认生成)进行创建出 单一对象(在 Spring体系 中被称为 Bean 或者 组件)。
需要为 Spring容器 留有空参构造方法,否则会抛异常
总结
本篇从我这个新手的视角,讲述了 Spring 的基本认知,IoC(控制反转)的核心逻辑。下篇文章我们将会聚焦于Bean,讲述 Spring 项目中不可或缺的成员, 包括Bean的单例特性(默认行为)、如何将对象交给Spring容器管理(注册)、以及项目中如何获取和使用Bean(即 DI(依赖注入) )。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
粤公网安备 44070302440918号