【JavaEE进阶】——第二节.Spring核心和设计思想

这篇具有很好参考价值的文章主要介绍了【JavaEE进阶】——第二节.Spring核心和设计思想。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

前言

一、Spring是什么?

二、什么是容器?

三、什么是IoC?

3.1 初始loC

3.2 举例解释loC

3.3 Spring IoC思想的体现

四、什么是DI?

4.1DI的概念

4.2 Ioc和DI的区别

总结


前言

今天我们将进入到有关spring的认识当中,要使用它的前提就是要认识并熟悉它,上一节我们介绍了有关maven的配置,必须要配置完成后,才能完成我们后面的学习工作,让我们进入到今天的学习当中吧!!!!!!!!!


一、Spring是什么?

概念:

我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是一个开源框架,有着活跃而庞大的社区,这就是它之所以能长久不衰的原因。

Spring 支持广泛的应用场景,它可以让 Java 企业级的应用程序开发起来更简单。

一句话总结就是:

Spring是包含了众多工具方法的IoC容器;

那么问题来了,工具方法是什么?IoC是什么?容器又是什么?

工具方法我们以后再说,我们先来看看IoC和容器;

【JavaEE进阶】——第二节.Spring核心和设计思想

二、什么是容器?

容器容器,肯定是要装东西的。其实我们之前学的List还有Tomcat都是容器,为啥这样说呢? 

你看List/Map里面放的是不是都是数据,那他不就相当于是一个数据存储容器吗?

还有Tomcat,他里面不是有webapps这个目录,我们之前不都是把servlet项目代码放到webapp这个目录下吗?这个webapps不就是项目的容器吗?

而这个webapps目录是Tomcat下面的一个子目录,那么我们把Tomcat称作是一个Web容器,完全没有问题呀!!

【JavaEE进阶】——第二节.Spring核心和设计思想

三、什么是IoC?

3.1 初始loC

Spring也是一个容器,而且Spring就是一个IoC容器。

那么关键的来了,什么是IoC??

IoC = Inversion of Control 翻译成中文就是控制反转的意思。

也就是说Spring是一个”控制反转“容器。

这个控制反转是什么意思呢?

你看,一般情况下,我们在A类中,想要去调用B类中的方法,是不是需要我们在A类中去实例化B类(new一个B类对象)然后再通过这个实例化出来的对象去调用B类中的方法。

也就是说,当前B类的控制权是再我们A类手中的,但是这样会带来一些问题(如耦合性过高),很多情况下,我们没必要用到谁就实例化谁,我们可以让”其他人“来操作(也能够满足我们的要求,同时这个时候B类的生命周期也与我们A类无关,我们不需要操心那么多,我们只要能拿到我们需要的就好)相当于我们把控制权交给了这个其他人,我们在需要用操作对象时候,让这个”其他人“来帮助我们来管理就好了。

谁调用A,谁就把A需要的B来传给A,但B的生命周期与A类无关(这样即使B类发生了变化,A类也不用管)

这个“其他人”,就是 Spring 框架。

此时,我们想要 A 类中调用 B 的时候, 告诉框架,我要在 A 中调用 B 了。
至于 B 的生命周期,和我们没有任何关系。这是 
控制反转。


前面说过: Spring 是一个 控制反转 的 容器。
也就是 像之前在传统开发的时候,所有需要我们自己去new东西,都不需要我们再去new 了。

因为我们把控制权 “反转给了” Spring 框架。
Spring 会帮我们管理所有的对象(Bean);

在 Spring 中,我们管 对象,叫做 Bean。


3.2 举例解释loC

下面我们结合一个具体的例子来看看IoC思想有什么好处?

 假如,我们现在构建⼀辆“车”的程序,我们的实现思路是这样的:

【JavaEE进阶】——第二节.Spring核心和设计思想

 构建⼀辆车(Car Class),然⽽⻋需要依赖⻋身(FrameWork Class),⽽⻋身需要依赖底盘(BottomClass),⽽底盘需要依赖轮胎(Tire Class),最终程序的实现代码如下:

【JavaEE进阶】——第二节.Spring核心和设计思想

 这样有什么问题呢?

就是当我们的Tire的size需要改变的时候,从上到下,因为Bottom依赖Tire,所以Bottom要对应的改变;

同时FrameWork又依赖着Bottom,那么FramWork也要做出对应的改变:同时Car又依赖着FrameWork,所以Car类也要做出必要的改变。

不信你看代码:

【JavaEE进阶】——第二节.Spring核心和设计思想 这样下来从上到下都有改变,整个代码的耦合性太高了。

为啥会这样呢?

因为每个类中都⾃⼰创建下级类,自己把活都干了。

当下级类发⽣改变操作,自己随着也要改变。

但这其实完全是没有必要的

比如我们在Car类中,我们需要的只是一个FrameWork对象,你给我们传一个FrameWork对象不就好了吗,我干嘛还要自己new一个对象呢?(new完后还有摊子事,真是吃力不讨好)


解决方案:

此时,我们只需要将原来由⾃⼰创建的下级类,改为传递的⽅式(也就是注入的⽅式),因为我们不需要在当前类中创建下级类了,所以下级类即使发生变化(创建或减少参数),当前类本身也无需修改任何代码,这样就完成了程序的解耦(减少了代码之间的关联性)

代码如下:

【JavaEE进阶】——第二节.Spring核心和设计思想

从上图也可以看出我们是分别在各自的类中传入了该类所需要的对象,那么对象的创建到达在那里呢?

在另外一个代码,但这个代码其实就和我们整个车的构建是无关的,只是负责构建驱动这个车;

 APP类的代码调整: 

【JavaEE进阶】——第二节.Spring核心和设计思想

代码经过以上调整,⽆论底层类如何变化,整个调⽤链是不⽤做任何改变的,这样就完成了代码之间的解耦,从⽽实现了更加灵活、通⽤的程序设计:

【JavaEE进阶】——第二节.Spring核心和设计思想


规律总结:

  • 在传统的代码中对象创建顺序是:           Car -> Framework -> Bottom -> Tire;
  • 改进之后解耦的代码的对象创建顺序是:Tire -> Bottom -> Framework -> Car;

我们发现了⼀个规律:传统代码是 Car 控制并创建了Framework,Framework 创建并创建了 Bottom,依次往下

⽽改进之后的控制权发⽣的反转,不再是上级对象创建并控制下级对象了,⽽是下级对象把注⼊将当前对象中,下级的控制权不再由上级类控制了,这样即使下级类发⽣任何改变,当前类都是不受影响的,这就是典型的控制反转,也就是 IoC 的实现思想


3.3 Spring IoC思想的体现

那么Spring的IoC思想体现在哪个地方呢?

本⽂刚开始咱们就讲:Spring 是包含了多个⼯具⽅法的 IoC 容器,这就是对 Spring 最核⼼的总结。“集成多个⼯具⽅法”这事咱们以后慢慢再讲,那如何理解“Spring 是⼀个 IoC容器”这句话呢?

既然Spring是一个IoC(控制反转)的容器,那么重点还在容器这两个字上,那么他就具备两个最基础的功能:

  1. 将对象存到容器中
  2. 从容器中取出对象

也就是学Spring最核心的功能就是学习如何将对象存到Spring当中,在从Spring中获取对象的过程中:

我们一开始就说了IoC就是控制权的转移,在这里我们就是把new对象的操作来交给Spring来做了,我们只用在需要的时候把对象从Spring当中取出来就行,这样我们项目代码本身就不要操心对象事情了,Spring 会帮我们管理所有的对象(Bean)

总结:

Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能力;

使用Spring的好处:

将对象存放到容器中的好处:将对象存储在 IoC 容器相当于将以后可能⽤的所有⼯具制作好都放到仓库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。⽽ new 对象的⽅式相当于,每次需要⼯具了,才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做,这就是 IoC 容器和普通程序开发的区别。

【JavaEE进阶】——第二节.Spring核心和设计思想

四、什么是DI?

DI全称Dependency Injection,当某个java 实例需要另一个java实例时,创建被调用者的工作不是由调用者实现,而是由spring容器来完成,然后注入调用者,因此称为依赖注入;

4.1DI的概念

说到 IoC 不得不提的⼀个词就是“DI”,DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注⼊”的意思。

dependency,这个词,相信大家并不陌生!
就是我们 在 pom.xml 中 引入依赖的时候,需要用到的标签。

【JavaEE进阶】——第二节.Spring核心和设计思想

那么依赖注入又是什么呢? 

所谓依赖注入,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。所以,依赖注入(DI)和控制反转(IoC)是从不同的角度的描述的同⼀件事情——就是指通过引⼊ IoC 容器,利用依赖关系注入的方式,实现对象之间的解耦;

 举例说明:
【JavaEE进阶】——第二节.Spring核心和设计思想

总结:IoC和DI,在广义上都是一回事!


4.2 Ioc和DI的区别

这个时候就会有一个经典的面试题了——IoC和DI有什么区别?

解析:

IoC是一种思想,DI是一种实现;

举例说明:

假设,我们有一天心情非常好!
决定下班之后,吃顿好的。
这就是一种思想.
但是!我们有说要吃什么吗?
很明显是没有的!
IoC,就是这样的。
我把权限交由 Spring,当我需要使用某个对象的时候,直接向它要。
这哥对象怎么给我的,我不管注!
IoC只关注:是否能拿到这个对象。


而 DI 就是一个具体实现:我准备下班去吃海底捞。
此时,吃什么,是不是就明确落实了!
吃海底捞,就是具体的实现。
DI 关注于 怎么将 依赖 注入 对应的对象里面

【JavaEE进阶】——第二节.Spring核心和设计思想

总结

1、Spring 是什么?如何理解 Spring?

Spring 是一个包含 众多工具方法 的 IoC 容器。
既然 Spring 是一个 IoC 容器(反转控制容器)。
Spring是 存储 IoC【反转控制(后的对象)】 的一个容器


2、IoC 和 DI 是什么?有什么区别?

Ioc全称Inversion of Control,把创建对象的权利交给容器,对象的实例不再由调用者来创建,而是由容器来创建,容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移带了容器,控制权发生了反转,这就是控制反转。它是spring框架的核心思想之一。

DI全称Dependency Injection,当某个java 实例需要另一个java实例时,创建被调用者的工作不是由调用者实现,而是由spring容器来完成,然后注入调用者,因此称为依赖注入。

IoC - Inversion Of Control(控制反转)
主要是将 对象的权限(创建与销毁)交由 Spring 来管理。
程序员 不必再去 new 对象了!
在使用到某个对象的时候,直接向 Spring 索取,直接使用即可。 
DI - dependency injection(依赖注入)
将 引入的依赖 (执行所依赖的对象),拿过来使用。
 区别:
IoC 是一种 思想。
DI 是具体的实现。


3、Spring最核心的功能是什么?

既然 Spring 是一个容器,那么,肯定是具有容器的两个核心功能(存 和 取)。
1、将 Bean(反转的对象)存储到 Spring 容器中。
2、将 Bean(反转的对象)从 Spring 容器中取出来。
这也就是 Spring 的 两个核心功能。

本节内容就介绍到这里,让我们下一期内容再见吧!!!!!!!!!!!

【JavaEE进阶】——第二节.Spring核心和设计思想文章来源地址https://www.toymoban.com/news/detail-417796.html

到了这里,关于【JavaEE进阶】——第二节.Spring核心和设计思想的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring 核心与设计思想

    ✏️作者:银河罐头 📋系列专栏:JavaEE 🌲 “种一棵树最好的时间是十年前,其次是现在” 通常所说的 Spring 指的是 Spring Framework(Spring 框架)。 Spring 是包含多种工具方法的 IoC 容器。 IoC(Inversion of Control): 控制反转 \\\"控制反转\\\"又是什么意思? 下面以一个程序来举例。 假如我

    2024年02月02日
    浏览(58)
  • 【Spring】(一)Spring设计核心思想

    Spring 是一个开源的轻量级 Java 框架,旨在简化 Java 应用程序的开发。它提供了一个全面的编程和配置模型,用于构建各种类型的应用,包括企业级应用和独立的 Java 应用。 Spring 的设计理念是基于依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming),使得应

    2024年02月14日
    浏览(43)
  • Spring框架核心与设计思想

    我们一般所说的Spring指的是Spring Framework(Spring 框架),它是一个开源的框架,Spring支持广泛的应用场景,它可以让Java企业级的应用程序开发变得更简单,官方一点的回答:spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级

    2023年04月15日
    浏览(47)
  • 【Spring】学习Spring需要掌握的核心设计思想

    目录 一、Spring是什么 二、什么是IoC容器 1、什么是容器 2、什么是IoC   3、Spring IoC 4、DI(依赖注入) 4.1、IoC和DI的区别 5、 DL(依赖查找) 我们通常所说的Spring指的是Spring Framework(Framework的意思就是框架),它是一个开源的框架,有着庞大的社区,这就是它之所以能长久不

    2024年02月14日
    浏览(60)
  • Spring框架概述及核心设计思想

    我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃而庞大的社区,这就是它之所以能长久不衰的原因;Spring 支持广泛的应用场景,它可以让 Java 企业级的应用程序开发起来更简单。 用⼀句话概括 Spring: Spring 框架是包含了众多工具方法的

    2024年02月16日
    浏览(39)
  • 【Spring】Spring有什么用?Spring核心与设计思想之IOC与DI

     Spring是一个开源的、轻量级的、面向企业级的Java应用框架。它提供了一种基于依赖注入和面向切面编程的方式,帮助开发者构建高效、可扩展的应用程序。  具体来说, Spring可以看作一个包含众多工具方法的IOC容器。 Spring的出现是为了让开发更简单~ 那么问题就很明确了

    2024年02月10日
    浏览(44)
  • Hadoop的第二个核心组件:MapReduce框架第二节

    1、客户端在执行MR程序时,客户端先根据设置的InputFormat实现类去对输入的数据文件进行切片(getSplits),如果没有设置InputFormat实现类,MR程序会使用默认的实现类(TextInputFormat–FileInputFormat的子类)进行切片规划,生成一个切片规划文件 2、客户端的切片规划文件生成以后

    2024年02月09日
    浏览(41)
  • 【Spring进阶系列丨第二篇】Spring中的两大核心技术IoC(控制反转)与DI(依赖注入)

    我们都知道Spring 框架主要的优势是在 简化开发 和 框架整合 上,至于如何实现就是我们要学习Spring 框架的主要内容,今天我们就来一起学习Spring中的两大核心技术IoC(控制反转)与DI(依赖注入)。 以经典的三层架构MVC作为案例,以前我们都是这么干的,看如下代码: 按照

    2024年02月05日
    浏览(70)
  • 敏捷设计的的4个核心思想

    来自《互联网产品之美》。 4个核心思想 1、强调面对面的沟通,也就是说沟通很重要,任何人的相互交流胜于任何流程和工具; 2、要把精力集中在可执行的程序上,可以运行的产品胜于综合性文档,也就是强调了原型、模型、演示等的重要性; 3、团队合作和团队激励,合

    2024年02月09日
    浏览(51)
  • 第二节 给SpringBootAdmin的server端加入spring security安全控制

    本来想用一节就写完SpringBootAdmin的,但随着研究的深入发现一节应该是不够的,网上的资料也不会非常系统,官网的例子有些已经好几年没更新了,所以接下来还是系统性的来写下吧 SpringBootAdmin github地址 第一节 完成基础配置,暴露所有端点 第二节 给SpringBootAdmin的server端加

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包