Spring - 这应该是java程序员不可逾越的一座大山,无论在开发或者面试中都无法绕过去的坎,毫不夸张的说,spring目前已经占据了java领域的半壁江山,甚至更多,而目前spring也已经更新到了5.x的版本。同时,随着springboot, springcloud等一系列微服务框架的诞生,spring也变得越来越流行,越来越广泛,越来越简便。 但简便的同时,其实是对底层大部分功能的封装,而如果我们不能很好的理解spring的基础用法,等到后面使用springboot,springCloud等进行大量的注解开发的时候,就会发现,很多东西理解的不够全,很多代码甚至看不懂。
恰巧最近有幸在B站上看了孙帅讲的spring课程,觉得大有所获,因此也想借着这个机会,把在课程上学习的内容整理出来,分享给更多的人,所以本系列中的大量案例都会参照孙帅老师的课程内容进行展开,如果没有听过孙帅老师课程的也强烈建议去听一些,讲的确实好,文末有链接地址。
一. 什么是spring
spring是一个java领域的开源框架,通过spring容器的概念,管理整个应用程序中所有的bean的生命周期和依赖关系,从而降低了程序中的耦合度。 spring体系本身包含很多个模块内容,目前文中所提到的spring,指的是springframework这个框架,除此之外,还包含springboot, springcloud,spring data ,spring security等项目模块,目前最新的版本是5.3.5
AOP的主要作用就是简化我们的开发过程 主要通过对pojo类的控制做到低侵入的编程模式,通过IOC和接口实现松耦合,基于切面做声明式编程,将复杂公共模块切面化,可配置,大大提高代码的复用性。
spring的官网地址: spring.io
github地址:github.com/spring-proj…
二. spring整体架构
spring框架是一个分层架构,包含一系列的功能要素,如下图
而spring中最核心的两大块功能我想大家肯定听说过,一个是IOC, 一个是AOP
三. IOC
IOC这个概念我想大家肯定都听说过,面试中也会经常被问到。那么到底什么是IOC呢,我们斗胆来分析一下。
IOC: Inversion of Control 的一个缩写, 翻译成中文是控制反转的意思。说实话,乍一听还是很抽象的,我想至少中国人应该很少会这么表达。与此同时,还有一个概念叫DI: Dependency inject,就是依赖注入的意思,很多人说这两个概念在spring中是一个含义,但我认为还是有一定的区别的,那么接下里我们来探讨写到底什么是IOC和DI.
IOC: 叫做控制反转,到底控制了什么,又反转了什么。先看下个案例,我们在没有spring的时候如果想给对象赋值,往往是通过下面这种形式。
Useruser=newUser(); user.setId(1); user.setName("张三"); 复制代码
而有了spring之后,springJ就可以帮我们处理这一切,写法如下:
<beanid="user"class="com.xxx.User"><propertyname="id"><value>10</value></property><propertyname="name"><value>xyz</value></property></bean>复制代码
这个时候,对象的创建和赋值,就不需要我们自己完成了,而是交给了spring工厂,这样就实现了代码的解耦(这个概念比较大,后面详述),所以所谓IOC: 控制反转,我们控制的就是对成员变量进行复制的控制权,反转是把对象对成员变量的控制权从代码反转到了spring工厂。这样做的好处就是解耦合。而依赖注入,其实就是通过spring实现对成员变量赋值的过程。
四. AOP
Spring中的第二大核心功能就是AOP: 那么什么是AOP,这个我想大多数人肯定都能答出来,没错,就是面向切面编程(Oriented Aspect programing),通过spring的AOP编程,我们可以更简单的实现事务的声明式管理,及公共开发切面的程序集成。这个也是一个比较抽象的概念,我们会在后面的程序中做详细的讲解。
五. 总结
好了,作为一个抛砖引玉的章节,关于spring的介绍就大致说这么多。后边我们会一步一步深入的学习里边的内容。同时给大家介绍一下讲解思路,我们还是会先从原始的xml配置方式开始讲解spring中的一些特性,不会一下子给大家上注解,后面了解了里面的原理后,我们会进一步剖析注解的用法,以及他和xml配置的比较。好了,敬请期待后面的内容吧。如果喜欢我的内容,希望多多三连支持。谢谢大家。
附录: 参考资料
孙帅spring详解:www.bilibili.com/video/BV185…
spring概述: zhuanlan.zhihu.com/p/107744875