Spring01——Spring简介、Spring Framework架构、Spring核心概念、IOC入门案例、DI入门案例

news2024/9/23 5:31:27

为什么要学

  • spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%
  • 专业角度
    • 简化开发:降低企业开发的复杂度
    • 框架整合:高效整合其他技术,提高开发与运行效率

学什么

  • 简化开发
    • IOC
    • AOP
      • 事务处理
  • 框架整合
    • MyBatis

怎么学

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

01-初识spring

  • 官网:https://spring.io/
  • Spring全家桶:Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能
    在这里插入图片描述
    • Spring Framework:全家桶中其他所有的技术都依赖于Spring Framework执行,底层设计性框架,所有技术都能在上面运行
    • Spring Boot:在Spring简化开发的基础上提高开发速度
    • Spring Cloud:分布式开发
      上述三个框架为主要的学习框架

02-Spring Framework系统架构

Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基
系统架构讲究上层依赖于下层

  1. Core Container:核心容器
    • 容器中放对象
  2. AOP:面向切面编程,不影响原始程序的基础上做增强功能
    • Aspect:AOP思想实现
  3. Data Access/Integration
    • Data Access:数据访问
    • Data Integration:数据集成
    • Transaction:事务
  4. Web:Web开发
    • springmvc相关
  5. Test:单元测试与集成测试
    在这里插入图片描述
    学习路线
    在这里插入图片描述

03-核心概念

代码书写现状:如果想更改数据层的实现,就还得更改业务层new的对象,源代码更改了,就需要重新编译、测试、部署、发布等
在这里插入图片描述
上述问题在于:在类中写了其他的实现,就导致了代码的耦合度偏高
解决方案:使用对象时,在程序中不主动使用new产生对象,转换为由外部提供
在这里插入图片描述
上述思想即为:IOC (Inversion of Control) 控制反转

IOC (Inversion of Control) 控制反转

  • 即:使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转

Spring与IOC的关系、Bean的概念

Spring技术对IOC思想进行了实现

  • Spring提供了一个容器,称为IOC容器(亦称Spring容器),用来充当IOC思想中的“外部
  • IOC容器负责对象的创建、初始化等过程,被创建或管理的对象称为Bean

DI (Dependency Injection) 依赖注入

由于service依赖dao运行,所以在IOC容器中,也将service依赖于dao

  • 于是有:在容器中建立bean与bean之间的依赖关系的整个过程(绑定service与dao之间依赖关系的过程),称为依赖注入
    在这里插入图片描述

如何实现的充分解耦

上述一系列的操作都是为了一个目标:充分解耦

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

核心概念小结

重点要理解什么是IOC/DI思想、什么是IOC容器和什么是Bean:

  1. 什么IOC/DI思想?
    • IOC:控制反转,控制反转的是对象的创建权
    • DI:依赖注入,绑定对象与对象之间的依赖关系
  2. 什么是IOC容器?
    • Spring创建了一个容器用来存放所创建的对象,这个容器就叫IOC容器
  3. 什么是Bean?
    • 容器中所存放的一个个对象就叫Bean或Bean对象

04-IOC入门案例

IOC入门案例主要介绍:Spring到底是如何来实现IOC的

思路分析

  1. Spring是使用容器来管理bean对象的,那么管什么?
    • 主要管理项目中所使用到的类对象,比如(Service和Dao)
  2. 如何将被管理的对象告知IOC容器?
    • 配置文件
  3. 被管理的对象交给IOC容器,要想从容器中获取对象,就先得思考如何获取到IOC容器?
    • Spring框架提供的相应接口,即:ApplicationContext
  4. IOC容器得到后,如何从容器中获取bean?
    • 调用Spring框架提供对应接口中的方法
  5. 使用Spring导入哪些坐标?
    • 用什么,就在pom.xml中导入相应依赖

代码实现

需求分析:将BookServiceImpl和BookDaoImpl交给Spring管理,并从容器中获取对应的bean对象进行方法调用。

  1. 创建maven项目
    在这里插入图片描述
  2. pom.xml添加Spring的依赖jar包(和junit测试)
<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
  1. 创建BookDao,BookDaoImpl,BookService和BookServiceImpl四个类
@Override
    public void save() {
        System.out.println("book dao save");
    }
public class BookServiceImpl implements BookService {
    private BookDao bookDao = new BookDaoImpl();

    @Override
    public void save() {
        System.out.println("book service save");
        bookDao.save();
    }
}
  1. 在配置文件中完成bean的配置
    在这里插入图片描述
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--配置bean-->
    <!--
      bean标签表示配置bean
      id属性表示给bean起名字
      class属性表示给bean定义类型
      得是具体的实现类而不是接口,要靠这个造对象的
      -->
    <bean id="bookDao" class="com.yolo.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="com.yolo.service.impl.BookServiceImpl"/>

</beans>

  1. 获取IOC容器并从容器中获取对象进行方法调用
    使用getBean(String name)方法,其name参数就是我们在bean配置的id,通过这个id来造对象
public class APP {
    public static void main(String[] args) {
        // 获取IOC容器
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取bean对象
//        BookDao bookDao = (BookDao) ac.getBean("bookDao");
        // 获取到对象后就调用对象方法
//        bookDao.save();
        BookService bookService = (BookService) ac.getBean("bookService");
        bookService.save();
    }
}

运行结果
在这里插入图片描述

05-DI入门案例

DI入门案例主要介绍:Spring到底是如何来实现DI的

思路分析

  1. 要想实现依赖注入,必须要基于IOC管理Bean
    • DI的入门案例要依赖于前面的IOC入门案例
  2. Service中使用new形式创建的Dao对象是否保留?
    • 不保留,这样才能解耦合,最终要使用IOC容器中的bean对象(因为只要有new的实现类,耦合度必然高)
  3. Service中需要的Dao对象如何进入到Service中?
    • 在Service中提供一个方法(例如提供一个set方法),让Spring的IOC容器可以通过该方法传入bean对象,也就达到了不是自己new,而是外部提供
  4. Service与Dao之间的关系如何描述?
    • 使用配置文件

代码实现

需求:基于IOC入门案例,在BookServiceImpl类中删除new对象的方式,使用Spring的DI完成Dao层的注入

  1. 删除业务层中使用new的方式创建的dao对象
// 删除业务层中使用new的方式创建的dao对象
        // private BookDao bookDao = new BookDaoImpl();
    private BookDao bookDao;
  1. 在业务层提供BookDao的setter方法
    我们在set方法中加一条输出语句,看看是否被调用了
public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
        System.out.println("set方法被容器调用啦");
    }
  1. 在配置文件中添加依赖注入的配置
	<bean id="bookDao" class="com.yolo.dao.impl.BookDaoImpl"/>
    <!--主要变化在这里-->
    <bean id="bookService" class="com.yolo.service.impl.BookServiceImpl">
        <!--配置server与dao的关系-->
        <!--
            property标签表示配置当前bean的属性
            name属性表示配置哪一个具体的属性(这里是配置bookService的bookDao属性)
            ref属性表示参照哪一个bean(参照当前配置文件中的bookDao)
        -->
        <property name="bookDao" ref="bookDao"/>
    </bean>

注意:配置中的两个bookDao的含义是不一样的

name=”bookDao”中bookDao的作用是让Spring的IOC容器在获取到名称后,将首字母大写,前面加set找对应的setBookDao()方法进行对象注入
ref=”bookDao”中bookDao的作用是让Spring能在IOC容器中找到id为bookDao的Bean对象给bookService进行注入

在这里插入图片描述

  1. 运行程序调用方法
    运行结果
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2111034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatis特殊符号处理,mybatis一级二级缓存,java反射机制

mybatis特殊符号处理 在 mybatis 中的 xml 文件中&#xff0c;存在一些特殊的符号&#xff0c;比如&#xff1a;<、>、"、&、<>等&#xff0c;正常书写 mybatis 会报错&#xff0c;需要对这些符号进行转义。具体转义如下所示&#xff1a; 特殊字符 转义字…

Openharmony软件评估指南-米尔瑞芯微RK3568开发板

Openharmony软件评估指南用于介绍在米尔的开发板上运行Openharmony系统下的核心资源与外设资源的测试步骤与评估方法。本文可作为前期评估指南使用&#xff0c;也可以作为通用系统开发的测试指导书使用。 本文档使用于米尔电子的MYD-LR3568系列板卡&#xff0c;该板卡是米尔电…

HCIE云计算--灾备

7、BCManager ebackup–云场景备份管理软件 8、ebackup软件的组成 9、ebackup的部署方式 10、ebackup的网络平面 11、组网方式 12、CBT技术–实现增量备份、差异备份、增量恢复 13、CBT和快照对比技术CBT 灾备释义&#xff1a;指利用科学的技术手段和方法&#xff0c;提前…

【鸿蒙HarmonyOS NEXT】调用后台接口及List组件渲染

【鸿蒙HarmonyOS NEXT】调用后台接口及List组件渲染 一、环境说明二、调用后台接口及List组件渲染三、总结 一、环境说明 DevEco Studio 版本&#xff1a; API版本&#xff1a;以12为主 二、调用后台接口及List组件渲染 后台接口及返回数据分析 JSON数据格式如下&#xf…

2024最新技术!使用Golang Beego开发的社区老人健康管理系统,Vue前端交互流畅,大数据分析助力健康趋势预测

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

用PG Back Web轻松进行PostgreSQL备份

什么是 PG Back Web &#xff1f; PG Back Web &#x1f418; 使用用户友好的 Web 界面轻松进行 PostgreSQL 备份&#xff01;&#x1f310;&#x1f4be;。PG Back Web 不仅仅是另一个备份工具。借助 PG Back Web&#xff0c;用户可以通过受 PGP 加密保护的直观 Web 界面轻松安…

JAVA—网络通信

本文是学习网络通信入门和简单了解UDP协议和TCP协议&#xff0c;学习和了解CS架构和简单了解BS架构和HTTP协议&#xff08;部分图片来自黑马程序员&#xff09; 目录 1.网络通信三要素 &#xff08;1&#xff09;IP地址 &#xff08;2&#xff09;端口号 &#xff08;3&am…

RHCE必过技巧,无需本人参加也可拿证?

RHCE(无需本人参加&#xff0c;给信息给款即可拿证) ​培训&#xff0b;认证 ​月初一期 ​月尾一期

回归预测 | Matlab基于贝叶斯算法优化XGBoost(BO-XGBoost/Bayes-XGBoost)的数据回归预测+交叉验证

回归预测 | Matlab基于贝叶斯算法优化XGBoost(BO-XGBoost/Bayes-XGBoost)的数据回归预测交叉验证 目录 回归预测 | Matlab基于贝叶斯算法优化XGBoost(BO-XGBoost/Bayes-XGBoost)的数据回归预测交叉验证效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现基于贝叶…

生命科学、食品科学信息类综合全文数据库

一、Nature系列资源 《Nature》杂志1869年创刊于英国&#xff0c;是最早的国际性科技期刊&#xff0c;其办刊宗旨是“将科学发现的重要结果介绍给公众&#xff0c;让公众尽早知道全世界自然知识的每一分支中取得的所有进展”。它报道和评论全球科技领域里最重要的突破&#xf…

【2024全国大学生数学建模竞赛】B题 模型建立与求解(含代码与论文)

目录 1问题重述1.1问题背景1.2研究意义1.3具体问题 2总体分析3模型假设4符号说明&#xff08;等四问全部更新完再写&#xff09;5模型的建立与求解5.1问题一模型的建立与求解5.1.1问题的具体分析5.1.2模型的准备 目前B题第一问的详细求解过程以及对应论文部分已经完成&#xff…

python_使用tkinter建立一个页面的模板

python_使用tkinter建立一个页面的模板 效果如图&#xff0c; 代码如下 """ python设计一下tkinter的布局在最上面排列5个按钮&#xff0c;然后一排4个水平分布的按钮,下面分左右两个图像显示&#xff0c;默认为白色背景为了实现您所描述的Tkinter布局&…

计组 2.Linux上程序的编写与调试

1. 我们之间使用vim创建.c文件&#xff0c;在里面编写完成后按住esc后冒号加wq保存退出 再使用gcc编译.c文件即可 vim test.c gcc test.c2. 这道题对比上一道题多出了编译过程&#xff0c;我们只需要按要求编译即可 gcc -E hello.c -o hello.i # 预处理阶段 gcc -S hello.i…

【超详细】windows Docker安装

关于 Docker 可以把应用以及其依赖都打包到一个容器中&#xff0c;而这个容器的性能开销极低。 Docker 并非是一个通用的容器工具&#xff0c;它依赖于已存在并运行的 Linux 内核环境。Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系统上的官方安装方式&#xff0c…

opencv实战项目二十一:MediaPipe人体姿态检测

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、MediaPipe是什么&#xff1f;二、MediaPipe使用&#xff1a;三、算法流程&#xff1a;四、效果&#xff1a; 前言 在智能科技不断渗透我们日常生活的今天&…

redis分布式锁和lua脚本

业务场景&#xff1a;多个线程对共同资源的访问&#xff1a;库存超卖/用户重复下单的原因 解决方法一&#xff1a;利用jvm内置锁&#xff0c;将非原子性操作变成原子性操作 Synchronized锁的是对象&#xff0c;对象必须是单例的。锁的是this,代表当前所在的类&#xff0c;这个…

“电轿三巨头”集齐,新车能否后浪拍前浪?

文/王俣祺 导语&#xff1a;纵观全年&#xff0c;要说哪款电车最火&#xff0c;那必然得是小米SU7。小米SU7在今年上半年上市以来&#xff0c;基本垄断了整个国产20万级电轿市场&#xff0c;甚至具备了和称霸电轿市场已久的特斯拉Model 3掰掰手腕的实力。那么&#xff0c;如今的…

Stream插件相关的用法

文章目录 1. 概念介绍2. 使用方法2.1 StreamController2.2 StreamBuilder 3. 示例代码 我们在上一章回中介绍了管理Stream事件流相关的内容&#xff0c;本章回中将介绍如何使用Stream事件流输入输出数据 。闲话休提&#xff0c;言归正传&#xff0c;让我们一起Talk Flutter吧。…

FPGA搭建XDMA中断模式的PCIE通信架构,简单读写测试,提供7套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板调试注意事项 5、vivado工…

2024年了,软件测试已经饱和了?

这个年头找工作跟找对象一样难&#xff0c;咳咳&#xff0c;工作对象都木有&#xff0c;双重打击5555。 关于今年的就业市场&#xff0c;很多人表示特别惨淡&#xff0c;以往简历一投就有大批企业来联系&#xff0c;今年自己投递一大堆简历出去&#xff0c;可能全部都是已读不…