Spring零基础到进阶之鸿蒙开篇

目录
  • Spring是什么
    • 1.什么是容器?
    • 2.什么是IOC?
    • 3.理解Spring IoC
    • 4.了解DI

Spring是什么

用一句简单的话来概括Spring:Spring是包含了众多工具方法的IoC容器。那么问题来了,什么是容器,什么是IOC容器?下面就一起来看看吧

1.什么是容器?

容器就是用来荣南某种物品的装置,前面我们也是学了很多容器的,类似于List/Map就是一个存储数据的容器,Tomcat就是一个存储Web项目的容器。

2.什么是IOC?

IOC(inversion of Control)翻译成中文就是“控制反转”的意思,这具体是什么意思呢?通过一个例子来解释一下:

public class NewCarExample {
    public static void main(String[] args) {
        Car car = new Car();
        car.init();
    }
    /**
     * 汽⻋对象
     */
    static class Car {
        public void init() {
            // 依赖⻋身
            Framework framework = new Framework();
            framework.init();
        }
    }
    /**
     * ⻋身类
     */
    static class Framework {
        public void init() {
            // 依赖底盘
            Bottom bottom = new Bottom();
            bottom.init();
        }
    }
    /**
     * 底盘类
     */
    static class Bottom {
        public void init() {
            // 依赖轮胎
            Tire tire = new Tire();
            tire.init();
        }
    }
    /**
     * 轮胎类
     */
    static class Tire {
        // 尺⼨
        private int size = 30;
        public void init() {
            System.out.println("轮胎尺⼨:" + size);
        }
    }
}

此时就构建出来一辆“汽车”,此时认为只要打印出来了轮胎的尺寸就表示构建成功了:

但是如果需求如果发生了变化,不再自己给定汽车的轮胎尺寸,而是根据用户的需求来进行变化,此时就会发现要改的代码不仅仅只是一个参数

public class NewCarUpdateExample {
    public static void main(String[] args) {
        //用户自己给定尺寸
        Car car = new Car(50);
        car.run();
    }
    /**
     * 汽⻋对象
     */
    static class Car {
        private Framework framework;
        public Car(int size) {
            framework = new Framework(size);
        }
        public void run() {
            // 依赖⻋身
            framework.init();
        }
    }
    /**
     * ⻋身类
     */
    static class Framework {
        private Bottom bottom;
        public Framework(int size) {
            bottom = new Bottom(size);
        }
        public void init() {
            // 依赖底盘
            bottom.init();
        }
    }
    /**
     * 底盘类
     */
    static class Bottom {
        private Tire tire;
        public Bottom(int size) {
            tire = new Tire(size);
        }
        public void init() {
            // 依赖轮胎
            tire.init();
        }
    }
    /**
     * 轮胎类
     */
    static class Tire {
        // 尺⼨
        private int size;
        public Tire(int size) {
            this.size = size;
        }
        public void init() {
            System.out.println("轮胎尺⼨:" + size);
        }
    }
}

这才仅仅是改变了一个轮胎尺寸,如果需求再需要加颜色、花纹、logo呢?那就会更加麻烦,这些都是当底层发生改变的时候,要修改的是整个调⽤链上的所有代码,那么为什么会出现这样的问题呢?

分析可知,这些类都是互相依赖的,耦合性非常强,那么该如何解耦呢?IoC就可以解决这样的问题,将控制权反转出去,不再自己掌控,而是将控制权交给IoC管理,只有自己使用的使用才调用

public class IocCarExample {
    public static void main(String[] args) {
        Tire tire = new Tire(20);
        Bottom bottom = new Bottom(tire);
        Framework framework = new Framework(bottom);
        Car car = new Car(framework);
        car.run();
    }
    static class Car {
        private Framework framework;
        public Car(Framework framework) {
            this.framework = framework;
        }
        public void run() {
            framework.init();
        }
    }
    static class Framework {
        private Bottom bottom;
        public Framework(Bottom bottom) {
            this.bottom = bottom;
        }
        public void init() {
            bottom.init();
        }
    }
    static class Bottom {
        private Tire tire;
        public Bottom(Tire tire) {
            this.tire = tire;
        }
        public void init() {
            tire.init();
        }
    }
    static class Tire {
        private int size;
        public Tire(int size) {
            this.size = size;
        }
        public void init() {
            System.out.println("轮胎:" + size);
        }
    }
}

此时就不在类里面进行控制了,而是只有在需要使用的时候,才去传入而是不是自己控制

再需要改动的时候的话,就只需要改最底层的,而不是改变整个控制链!

因此使用IOC最大的优点就是实现了代码的解耦;对象(Bean)生命周期交给IOC框架来维护,就不需要再关注对象的创建了!

3.理解Spring IoC

通过上面的对IoC的认识,就可以得知Spring IoC容器最核心的功能了:

  • 将Bean(对象)存储到Spring(容器)中;
  • 将Bean(对象)从Spring(容器)中取出来;

4.了解DI

说到IoC就不得不提起DI(Dependency Injection)了,翻译过来就是依赖注入的意思,那具体代表什么呢?所谓依赖注⼊,其实就是在 IoC 容器运⾏期间,动态地将某种依赖关系注⼊到对象之中,其实DI和IoC是从不同的⻆度的描述的同⼀件事情,而IoC其实是一种思想,而DI是具体的落地实现,思想就指导了具体的落地实现!

IoC和DI的区别:IoC是一种思想,DI是一种实现(类似于乐观锁和CAS);

第一次介绍到这就结束了,主要还是先来认识一下Spring到底是什么,后面我会再介绍其具体使用和方法的!

到此这篇关于Spring零基础到进阶之鸿蒙开篇的文章就介绍到这了,更多相关Spring 基础内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring Boot 底层原理基础深度解析

    目录 1. 底层注解@Configuration 2. 底层注解@Import 3. 底层注解@Conditional 1. 底层注解@Configuration @Configuration 注解主要用于给容器添加组件(Bean),下面实践其用法: 项目基本结构: 两个Bean组件: User.java package com.menergy.boot.bean; /** * 用户 */ public class User { private String name; private Inte

  • Spring Boot详解创建和运行基础流程

    目录 1. 初始 Spring Boot 1.1 什么是Spring Boot 1.2 Spring Boot 的优点 2. 创建 Spring Boot 项目(Idea) 2.1 首先安装 Spring Assistant 插件 2.2 重启Idea-New Project ① 点击 Spring Assistant 直接Next就可以了 ② Next 之后的页面介绍 ③ 引入依赖, 选择Spring Boot的版本 ④ 选择项目名称和保存路径 ⑤ Spring Boot 项目创建完成 3.

  • Spring入门基础之依赖注入

    目录 一.构造器注入 二.set注入 三.其他方式注入 (1)导入约束 (2)p命名注入 (3)c命名注入 一.构造器注入 在前几节已经做过了详细的说明讲解,我们先跳过 二.set注入 依赖注入 依赖: bean对象的创建以及管理都依赖于Spring IOC容器 注入: bean对象中的所有属性,都有容器进行注入 在前面我们已经见识过了 普通类型注入和 bean注入的方式,那么对于复杂类型List.数组类型.Map.Set属性等怎么进行注入呢? 我们先提供一个包含各种类型的实体类 Student

  • Spring零基础到进阶之鸿蒙开篇

    目录 Spring是什么 1.什么是容器? 2.什么是IOC? 3.理解Spring IoC 4.了解DI Spring是什么 用一句简单的话来概括Spring:Spring是包含了众多工具方法的IoC容器.那么问题来了,什么是容器,什么是IOC容器?下面就一起来看看吧 1.什么是容器? 容器就是用来荣南某种物品的装置,前面我们也是学了很多容器的,类似于List/Map就是一个存储数据的容器,Tomcat就是一个存储Web项目的容器. 2.什么是IOC? IOC(inversion of Con

  • Spring零基础到进阶之使用方法详解

    目录 一.Spring的创建和使用 1.创建一个Maven项目 2.添加Spring框架支持 3.添加启动类 二.存储Bean 1.添加配置文件(非第一次省略此步) 2.创建Bean对象 2.1.创建Bean对象 2.2.将Bean对象注入到Spring中 三.获取并使用 Bean 对象 1.先得到Spring上下文对象 2.再通过上下文提供的方法获取到Bean对象 3.使用Bean对象 今天介绍一下Spring的基本使用,为了更好的熟悉Spring,可以先看一下我前面的文章: Spring鸿蒙

  • Spring零基础入门IOC

    目录 1.HelloSpring 2.IOC创建对象方式 2.1.通过无参构造方法来创建 2.2.通过有参构造方法来创建 1.HelloSpring 导入Jar包 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version> </de

  • 零基础详解C语言指针进阶

    目录 前言 1.字符指针 例题 1 2.指针数组 例题 2 3.数组指针 3.1数组指针的定义 3.2 &数组名与数组名 3.3 数组指针的使用 4.数组与指针在函数里的传参 4.1 一维数组的传参 4.2 二维数组的传参 4.3 一级指针的传参 4.4 二级指针的传参 5.函数指针 6. 函数指针数组 用函数指针数组实现一个计算器 7.回调函数 前言 这是指针的进阶,如果想入门指针的朋友可以关注我的另外一篇文章—c语言 指针零基础讲解 坚持看完,一定会有很大的收获~~ 那接下来—起航 1.字符

  • Java数据结构顺序表从零基础到精通进阶

    目录 一.什么是线性表 二.顺序表 三.手撕顺序表 属性定义 构造方法 接口实现 确保顺序表空间 增加元素 打印顺序表 判断顺序表中是否包含某个元素 查找元素 获取 pos 位置的元素 将 pos 位置的元素值设为 value 删除第一次出现的关键字key 获取顺序表长度 清空顺序表 删除所有的key 一.什么是线性表 线性表是最基本.最简单.也是最常用的一种数据结构.线性表*(linear list)*是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列.常见的线性表有顺序表,链

  • Spring事务管理零基础入门

    目录 一.简介 二.特性(一原持久隔离) 2.1 原子性 2.2 一致性(类似能量守恒) 2.3 隔离性 2.4 持久性 三.隔离级别 3.1 事务级别(从低到高) 3.2 常用数据库默认级别: 3.3 事务中可能出现的问题: 四.传播特性 4.1 死活都不要事务 4.2 可有可无的 4.3 必须要有事务 五.应用 5.1 数据表 5.2 实体类 5.3 Service 一.简介 概念:事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作,这些操作一起提交,要么都执行,要么都不

  • 零基础如何系统的学习Java

    原来我曾经写过一篇<如何快速学习Java>的文章.后来也有朋友咨询我"如何系统的学习Java"的问题. 这些朋友中,好多都是已经入了行,但不满足于工作枯燥的"增删改查",或者"模板化"的SSM框架.而是有心成为Java技术专家,或者架构师. 对于朋友的提问,我本很乐意回答.然而这个答案绝非三言两语能够说清.所以,我就索性写一篇文章来回答. 文章写得有点匆忙,不完善,遗漏之处,我会逐渐完善. 学习计划 首先,我把Java系统学习分成两个

  • Django零基础入门之路由path和re_path详解

    目录 urls.py文件中的path和re_path 1.path的基本规则: 2.默认支持的转换器有: 3.re_path正则匹配: Django中实战使用path和re_path 1.urls.py文件: 2.views.py视图函数文件: 3.效果: 假设现在有个需求:   需要通过URL进行参数传递,我们该怎么做呢?     其中有个方法就是本文要讲的内容--path和进阶版的re_path. urls.py文件中的path和re_path 1.path的基本规则: path('test

  • 零基础搭建boot+MybatisPlus的详细教程

    目录 1.准备工作 1.1 创建数据库表 1.2 创建boot项目 1.3 创建实体类(映射数据库表) 2.使用mybatisPlus(操作数据库) 2.1 添加mybatisPlus依赖 2.2 配置数据库信息 2.3 创建mapper接口 2.4 配置mapper扫描 2.5 test 3. 常用设置 3.1 设置表映射规则 3.2 主键生成策略(默认基于雪花算法) 3.3 全局设置 3.4 字段与列名的驼峰映射(默认开启) 3.5 日志设置 4.基操 4.1 插入 insert() 4.2

  • SpringBoot2零基础到精通之数据与页面响应

    目录 1 数据响应 1.1 数据响应(JSON为例) 1.2 数据响应之内容协商 2 页面响应 2.1 模板引擎之Thymeleaf 2.2 拦截器 2.3 文件上传 1 数据响应   数据响应一般分为两种:页面响应和数据响应,一般来说页面响应是用来开发一些单体项目(也就是前后端都在一个开发工具中),而数据响应则是用来进行前后端分离开发的项目,前端发送过来请求后端响应相应的数据. 1.1 数据响应(JSON为例)   如果想让SpringMVC响应返回一个JSON类型的数据,首先需要在项目的po

随机推荐