Spring01-入门、IOC、DI
创始人
2025-05-28 17:52:30
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)]

相关内容

热门资讯

山西完善普惠托育服务收费政策 近日,省发展改革委、省卫生健康委、省教育厅、省财政厅联合下发通知,完善我省普惠托育服务收费政策。 通...
箭牌家居:公司严格遵循相关法律... 证券之星消息,箭牌家居(001322)06月05日在投资者关系平台上答复投资者关心的问题。 投资者提...
2025重庆民政政策宣传月启动 6月5日,“民生为大·福耀巴渝”2025年民政政策宣传月暨主流媒体看重庆福彩公益行活动在重庆市爱心庄...
证监会:继续引导中长期资金入市... 人民财讯6月5日电,证监会首席律师程合红6月5日在参加“2025天津五大道金融论坛”时表示,证监会将...
中国证监会首席律师程合红:抓紧... 观点网讯:6月5日,中国证监会首席律师程合红在活动上表示,将抓紧研究制定《关于进一步加强资本市场中小...
2025年国家统一法律职业资格... 央视网消息:司法部发布2025年国家统一法律职业资格考试公告,明确客观题考试网上报名时间为6月16日...
这项政策出台半年,激起广东能源... 今天(6月5日),《广东省人民政府办公厅关于推动能源科技创新促进能源产业发展的实施意见》(以下简称《...
五芳斋回应传闻:坚决维护自身合... 近日,有投资者在互动平台询问称“最近,抖音、头条等平台大批量出现关于五芳斋的不实新闻。请问公司有没有...
原创 6... 前言 5月30日,香港会展中心将见证一个历史性时刻——来自60个国家的代表将齐聚一堂,见证国际调解...
香港稳定币条例生效引爆券商研究... 近期,香港《稳定币条例》正式生效,成为全球首个针对法币稳定币建立牌照制度的司法管辖区。这一里程碑式立...