Spring01-入门、IOC、DI
创始人
2025-05-28 17:24:29
0

文章目录

    • 学习目标
    • 一、Spring简介
      • 1 Spring课程介绍
        • 问题导入
        • 1.1 为什么要学
        • 1.2 学什么
        • 1.3 怎么学
      • 2 初识Spring
        • 问题导入
        • 2.1 Spring家族
        • 2.2 Spring发展史
      • 3 Spring体系结构
        • 问题导入
        • 3.1 Spring Framework系统架构图
        • 3.2 Spring Framework课程学习路线
      • 4 Spring核心概念
        • 问题导入
        • 4.1 目前我们代码存在的问题
        • 4.2 核心概念
    • 二、IOC和DI入门案例【重点】
      • 1 IOC入门案例【重点】
        • 问题导入
        • 1.1 门案例思路分析
        • 1.2 实现步骤
        • 1.3 实现代码
        • 1.4 运行结果
      • 2 DI入门案例【重点】
        • 问题导入
        • 2.1 DI入门案例思路分析
        • 2.2 实现步骤
        • 2.3 实现代码
        • 2.4 图解演示

学习目标

  • 能够说出Spring的体系结构
  • 能够编写IOC入门案例
  • 能够编写DI入门案例
  • 能够配置setter方式注入属性值
  • 能够配置构造方式注入属性值
  • 能够理解什么是自动装配

一、Spring简介

1 Spring课程介绍

问题导入

我们为什么要学习Spring框架?

1.1 为什么要学

  • Spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%

  • 专业角度

    • 简化开发,降低企业级开发的复杂性
    • 框架整合,高效整合其他技术,提高企业级应用开发与运行效率

企业级开发:Spring使用率>90%

1.2 学什么

  • 简化开发

    • IOC(反转控制)
    • AOP(面向切面编程)
      • 事务处理
  • 框架整合

    • MyBatis
    • MyBatis-plus
    • Struts
    • Struts2
    • Hibernate
    • ……

1.3 怎么学

  • 学习Spring框架设计思想
  • 学习基础操作,思考操作与思想间的联系
  • 学习案例,熟练应用操作的同时,体会思想

2 初识Spring

问题导入

目前我们使用的是Spring几版本?

2.1 Spring家族

  • 官网:https://spring.io
  • Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能。

在这里插入图片描述
spring家族:
在这里插入图片描述

2.2 Spring发展史

在这里插入图片描述

3 Spring体系结构

问题导入

通过系统架构图,Spring能不能进行数据层开发?Spring能不能进行web层开发?

3.1 Spring Framework系统架构图

  • Spring FrameworkSpring生态圈中最基础的项目,是其他项目的根基

在这里插入图片描述
4.x架构图趋于成熟
在这里插入图片描述

Aspect不是spring原创,是别人的东西spring觉得非常之好,拿过来直接用,所以导包时要单独导Aspect包(依赖)

3.2 Spring Framework课程学习路线

在这里插入图片描述

4 Spring核心概念

问题导入

问题1:目前我们的代码存在什么问题以及怎么解决这些问题?

问题2:请描述什么是IOC,什么是DI?

4.1 目前我们代码存在的问题

在这里插入图片描述

  • 代码书写现状
    • 耦合度偏高
  • 解决方案
    • 使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象

4.2 核心概念

  • IOC(Inversion of Control)控制反转

    使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。通俗的讲就是“将new对象的权利交给Spring,我们从Spring中获取对象使用即可

  • Spring技术对IoC思想进行了实现

    • Spring提供了一个容器,称为IOC容器,用来充当IoC思想中的“外部”

    • IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean

      IOC容器也叫Spring容器,就是上图中的Core Container
      IoC容器充当Ioc思想中的“外部”就是说:主动new对象改成由IoC容器提供对象

  • DI(Dependency Injection)依赖注入

    • 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。

      service和bean都在IoC容器中被管理,他们之间又有关系,那么IoC容器不妨直接将他们之间关系绑定好,这个过程成为:DI

在这里插入图片描述

  • 目标:充分解耦
    • 使用IoC容器管理bean(IOC)
    • 在IoC容器内将有依赖关系的bean进行关系绑定(DI)
  • 最终效果
    • 使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系

高内聚,低耦合,一切的一切就是要减少类与类(代码与代码)之间的关系,但是类与类之间又有着不可分割的关系,那么全部不能写死,全部关系变成动态的有关,代码都抽象到接口层面,都不写死,就充分解耦了。最后维护时改了A不影响B,改了B不影响C…

// TODO 下面还未整理好

二、IOC和DI入门案例【重点】

1 IOC入门案例【重点】

问题导入

标签中id属性和class属性的作用是什么?

1.1 门案例思路分析

  1. 管理什么?(Service与Dao)
  2. 如何将被管理的对象告知IOC容器?(配置文件)
  3. 被管理的对象交给IOC容器,如何获取到IoC容器?(接口)
  4. IOC容器得到后,如何从容器中获取bean?(接口方法)
  5. 使用Spring导入哪些坐标?(pom.xml)

1.2 实现步骤

【第一步】导入Spring坐标
【第二步】定义Spring管理的类(接口)
【第三步】创建Spring配置文件,配置对应类作为Spring管理的bean对象
【第四步】初始化IOC容器(Spring核心容器/Spring容器),通过容器获取bean对象

1.3 实现代码

【第一步】导入Spring坐标

org.springframeworkspring-context5.2.10.RELEASE

【第二步】定义Spring管理的类(接口)

  • BookDao接口和BookDaoImpl实现类
public interface BookDao {public void save();
}public class BookDaoImpl implements BookDao {public void save() {System.out.println("book dao save ...");}
}
  • BookService接口和BookServiceImpl实现类
public interface BookService {public void save();
}public class BookServiceImpl implements BookService {private BookDao bookDao = new BookDaoImpl();public void save() {System.out.println("book service save ...");bookDao.save();}
}

【第三步】创建Spring配置文件,配置对应类作为Spring管理的bean对象

  • 定义applicationContext.xml配置文件并配置BookServiceImpl


注意事项:bean定义时id属性在同一个上下文中(IOC容器中)不能重复

【第四步】初始化IOC容器(Spring核心容器/Spring容器),通过容器获取Bean对象

public class App {public static void main(String[] args) {//1.创建IoC容器对象,加载spring核心配置文件ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");//2 从IOC容器中获取Bean对象(BookService对象)BookService bookService= (BookService)ctx.getBean("bookService");//3 调用Bean对象(BookService对象)的方法bookService.save();}
}

1.4 运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Mt4oRn4-1678892527624)(assets/image-20210729184337603.png)]

2 DI入门案例【重点】

问题导入

标签中name属性和ref属性的作用是什么?

2.1 DI入门案例思路分析

  1. 基于IOC管理bean
  2. Service中使用new形式创建的Dao对象是否保留?(否)
  3. Service中需要的Dao对象如何进入到Service中?(提供方法)
  4. Service与Dao间的关系如何描述?(配置)

2.2 实现步骤

【第一步】删除使用new的形式创建对象的代码
【第二步】提供依赖对象对应的setter方法
【第三步】配置service与dao之间的关系

2.3 实现代码

【第一步】删除使用new的形式创建对象的代码

public class BookServiceImpl implements BookService {private BookDao bookDao;  //【第一步】删除使用new的形式创建对象的代码public void save() {System.out.println("book service save ...");bookDao.save();}
}

【第二步】提供依赖对象对应的setter方法

public class BookServiceImpl implements BookService {private BookDao bookDao;public void save() {System.out.println("book service save ...");bookDao.save();}//【第二步】提供依赖对象对应的setter方法public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}
}

【第三步】配置service与dao之间的关系

在applicationContext.xml中配置




2.4 图解演示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CFqgFZSX-1678892527624)(assets/image-20210729183104748.png)]

相关内容

热门资讯

扫房神器2安卓系统,打造洁净家... 你有没有发现,家里的灰尘就像小精灵一样,总是悄悄地在你不注意的时候跳出来?别急,今天我要给你介绍一个...
安卓完整的系统设置,全面掌控手... 亲爱的手机控们,是不是觉得你的安卓手机用久了,功能越来越强大,但设置却越来越复杂?别急,今天就来带你...
电视安卓系统是几代机子,揭秘新... 你有没有想过,家里的电视是不是已经升级到了最新的安卓系统呢?别小看了这个小小的系统升级,它可是能让你...
安卓系统隐私有经常去,系统级防... 你知道吗?在咱们这个数字化时代,手机可是我们生活中不可或缺的好伙伴。但是,你知道吗?这个好伙伴有时候...
安卓10系统断网软件,轻松实现... 你有没有遇到过这种情况?手机突然断网了,明明信号满格,却连不上网,急得你团团转。别急,今天就来给你揭...
安卓可以改什么系统版本,体验全... 你有没有想过,你的安卓手机其实可以像换衣服一样,换一个全新的“系统版本”呢?没错,这就是今天我们要聊...
最好的平板游戏安卓系统,畅享指... 亲爱的游戏迷们,你是否在寻找一款能够让你在安卓平板上畅玩无忧的游戏神器?别急,今天我就要给你揭秘,究...
华为安卓系统卡顿解决,华为安卓... 你是不是也遇到了华为安卓系统卡顿的问题?别急,今天就来给你支几招,让你的华为手机重新焕发活力!一、清...
安卓建议升级鸿蒙系统吗,探讨鸿... 亲爱的安卓用户们,最近是不是被鸿蒙系统的新鲜劲儿给吸引了?是不是在犹豫要不要把你的安卓手机升级成鸿蒙...
安卓如何变苹果系统桌面,桌面系... 你有没有想过,把你的安卓手机变成苹果系统桌面,是不是瞬间高大上了呢?想象那流畅的动画效果,那简洁的界...
windows平板安卓系统升级... 你有没有发现,最近你的Windows平板电脑突然变得有些不一样了?没错,就是那个一直默默陪伴你的小家...
安卓系统扩大运行内存,解锁更大... 你知道吗?在科技飞速发展的今天,手机已经成为了我们生活中不可或缺的好伙伴。而手机中,安卓系统更是以其...
安卓系统怎么改变zenly,探... 你有没有发现,你的安卓手机上的Zenly应用最近好像变得不一样了?没错,安卓系统的大手笔更新,让Ze...
英特尔安卓子系统,引领高效移动... 你有没有想过,手机里的安卓系统竟然也能和电脑上的英特尔处理器完美结合呢?这可不是天方夜谭,而是科技发...
永远会用安卓系统的手机,探索安... 亲爱的手机控们,你是否也有那么一款手机,它陪伴你度过了无数个日夜,成为了你生活中不可或缺的一部分?没...
有哪些安卓手机系统好用,好用系... 你有没有发现,现在手机市场上安卓手机的品牌和型号真是琳琅满目,让人挑花了眼?不过别急,今天我就来给你...
卡片记账安卓系统有吗,便捷财务... 你有没有想过,用手机记账是不是比拿着小本本记录来得方便多了?现在,手机上的应用层出不穷,那么,有没有...
武汉摩尔影城安卓系统APP,便... 你有没有想过,一部手机就能带你走进电影的世界,享受大屏幕带来的震撼?今天,就让我带你详细了解武汉摩尔...
联想刷安卓p系统,畅享智能新体... 你有没有发现,最近联想的安卓P系统刷机热潮可是席卷了整个互联网圈呢!这不,我就迫不及待地来和你聊聊这...
mac从安卓系统改成双系统,双... 你有没有想过,你的Mac电脑从安卓系统改成双系统后,生活会有哪些翻天覆地的变化呢?想象一边是流畅的苹...