01Spring Framework 概述
今日内容
Spring介绍
Spring核心内容 IOC和AOP
Spring IOC/DI 详细理解
说明
以下的Spring指的都是Spring社区中提供的一个核心解决方案,也就是Spring Framework 框架
一.Spring 介绍
1.1 概述
Spring是一个轻量级的Java开发框架。使用框架的主要优势之一就是分层架构,方便解耦。Spring的核心是IOC(依赖注入控制反转)和AOP(面向切面)。同时Spring可以整合其他框架
1.2 Spring 分层架构
Spring框架是一个分层架构,由很多模块组成,允许应用程序自由选择和组装相应的功能模块,模块图如下:





二. Spring核心内容 IOC和AOP
2.1 IOC
IOC:控制反转(Inversion of Control):
底层采用了工厂模式。Spring容器就像是一个工厂,管理着对象的生命周期。开发同学只需要在Spring的配置文件中配置对应的bean以及设置相应的属性,让Spring容器来生成类的实例对象以及管理对象
就像生活中的工厂车间一样,我们会只需要在车间控制面板输入参数,之后物品的生产和加工就交给工厂来自动加工。我们将产品的加工交给了工厂来进行处理
DI:依赖注入(Dependency Injection):
利用了 java 反射,Spring容器启动的时候,会把配置文件中配置的bean都初始化好。然后在你调用的使用就会把已经初始化好的bean分配给你需要调用的这些调用方。
就像工厂中的控制面板,我们输入参数,工厂就根据参数来进行处理
2.2 AOP
AOP(面向切面编程)可以说是对OOP(面向对象编程)的补充。OOP的三大特征是封装,继承,多态建立了一种层次结构,这种层次结构允许进行纵向开发,但是不适合横向开发。例如:日志功能。日志功能一般横向地散布在所有对象层次中,而它与对象的核心功能毫无关系。这种散布在各处的无关的代码我们称为是“横切”代码。
AOP利用的是一种“横切”技术。他能将影响多个类的的公共行为封装到一个可重用的模块中。从而减少代码量。例如:将日志相关的代码封装成一个类。
AOP说白了就是说将那些与业务无关但是也却被各业务模块所共同调用的逻辑封装起来。例如权限认证,日志,事务等。这样便于减少系统的重复代码,降低模块之间的耦合度,便于维护与管理。
三. Spring IOC/DI 详细理解
说白了就是将Bean的生命周期,如对象的创建,管理,销毁交给Spring容器来进行管理。开发同学只需将要创建的Bean在文件中进行配置。Spring容器启动后就会创建你所配置的这些Bean。在容器运行期间动态的返回调用者所需要的Bean。Spring容器在创建对象的时候使用的是工厂模式程序在运行期间动态获取Bean是采用反射方式
3.1 IOC/DI
IOC — Inversion Of Control(控制反转)
DI — Dependency Injection(依赖注入)
这两个是一种设计思想,IOC 与 DI 是同一个概念的不同角度描述
3.1.1 IOC 何为控制反转
例如,你想买房,你的自己找房源,找房东啥的都是自己去做。现在出现了一个房屋中介它可以完成找房的全部过程,然后向你推荐,你只需获取结果就行,这样就把找房的过程交给了第三方,这就是控制反转
在 Java 开发中,IOC 意味着你把设计好的对象交给 Spring 容器控制,而不是自己在对象内部控制
理解IOC的关键就是两点:
谁控制谁、控制什么:Spirng 容器控制了对象生命周期(何时创建,合适销毁等)。控制了外部资源的获取。如其他对象等
为何是反转、反转了什么:Spring 容器帮我们查找需要哪些依赖的对象,我们只是被动的接受依赖的对象。反转了依赖对象的获取,我们由主动获取变为被动获取。这里的 “我们” 指的是当前对象,“依赖的对象”指的是当前对象所需使用的对象
3.1.2 DI 何为依赖
理解 DI 的两个关键点是:
谁依赖谁,为什么需要依赖 :应用程序依赖 Spring 容器;应用程序需要 Spring 容器来为对象提供所需的外部资源。如其他对象
谁注入谁,注入什么:Spring 容器为应用程序进行注入;注入应用程序所依赖的对象
3.2 IOC/DI 思想
IOC/DI 很好的体现了 “ 别找我们,我们找你 ”的思想。即由 Spring 容器来管理对象 并且 Spring 容器帮助对象找到要依赖的对象。而不是由对象主动去找
四. IOC/DI 总结
IOC:所有的类都会在 Spring 容器中注册,当一个对象需要某些对象的时候,Spring 容器在运行的时候就会把这些对象给这个对象。对象的生命周期由 Spring 容器进行管理。IOC 是通过 工厂模式 和 代理某事 所实现的
DI:DI 的重点是在程序运行期间,动态的向某个对象提供它所依赖的其他对象。DI 的实现方式是通过 Java 反射实现的
控制的什么被反转了:获取依赖对象的方式反转了!!!
五. Spring 家族
Spring发展至今,家族成员已经非常庞大,以下仅列出一些常见的家族项目。更多家族成员请访问:http://spring.io/projects

关注点赞,学习编程不迷路,笔芯❤~
