Spring(Spring/Springboot 的创建) 基础

一. Spring

1.1 Spring是什么?

Spring 指的是 Spring Frameword(Spring 框架),它是一个开源框架。

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

1.2 什么是容器?

容器时用来容纳某种物品的装置。

我们之前接触到的容器:

List/Map -> 数据存储容器

Tomcat-> Web 容器

1.3 什么是IoC? 

IoC(Inversion of Control) 翻译成中文是“控制反转”的意思,也就是说spring 是一个“控制反转”的容器。

在日常代码中,我们通常通过new来构造对象,而这个对象的生命周期由程序员和代码片段控制。但IoC则是不需要程序员来new 对象了,在IoC加载时,放入IoC的对象也会加载,当我们需要这个对象了,直接从容器中取就行了,不需要再new了。

1.4 IoC 代码解释

在我们传统代码中,构建一辆车(Car),然而车需要依赖车身(FrameWork),而车身要依赖地盘(Bottom),而地盘需要依赖(Tire)。代码实现如下:

//车
public class Car {private FrameWork frameWork;public Car(){this.frameWork=new FrameWork();}public void init(){System.out.println("Car Init");this.frameWork.init();}
}//车身
public class FrameWork {private Bottom bottom;public FrameWork(){this.bottom=new Bottom();}public void init(){System.out.println("FrameWork Init");this.bottom.init();}
}//底盘
public class Bottom {Tire tire=null;public  Bottom(){this.tire=new Tire();}public void init(){System.out.println("Bottom Init");tire.init();}
}//车轮
public class Tire {int size=15;public Tire(){}public void init(){System.out.println("Tire Init,Size:"+size);}
}public class Test {public static void main(String[] args) {Car car=new Car();car.init();}
}

但是随着对车的需求量增大,对车的个性化也会越来越多,比如需要不同尺寸的轮胎,那这个时候就需要我们加工多种尺寸的轮胎,此时就需要对上述代码进行修改。修改后的代码如下所示:

//车
public class Car {private FrameWork frameWork;public Car(int size){this.frameWork=new FrameWork(size);}public void init(){System.out.println("Car Init");this.frameWork.init();}
}//车身
public class FrameWork {private Bottom bottom;public FrameWork(int size){this.bottom=new spring.old.Bottom(size);}public void init(){System.out.println("FrameWork Init");this.bottom.init();}
}//底盘
public class Bottom {Tire tire=null;public Bottom(int size){this.tire=new spring.old.Tire(size);}public void init(){System.out.println("Bottom Init");this.tire.init();}
}//车轮
public class Tire {int size=15;public Tire(int size){this.size=size;}public void init(){System.out.println("Tire Init,Size:"+size);}
}public class Test {public static void main(String[] args) {Car car=new Car();car.init();}
}

从以上代码可以看出,若是最低层的代码改动之后,这个调用链上的所有代码都需要修改。

为了解决上述问题,实现解耦,通过控制反转进行程序开发:

//车
public class Car {FrameWork frameWork=null;public Car(FrameWork frameWork){this.frameWork=frameWork;}public void init(){System.out.println("Car Init");frameWork.init();}
}//车身
public class FrameWork {Bottom bottom=null;public FrameWork(Bottom bottom){this.bottom=bottom;}public void init(){System.out.println("FrameWork Init");bottom.init();}
}//地盘
public class Bottom {Tire tire=null;public  Bottom(Tire tire){this.tire=tire;}public void init(){System.out.println("Bottom Init");tire.init();}
}//车轮
public class Tire {int size=15;public Tire(int size){this.size=size;}public void init(){System.out.println("Tire Init,Size:"+size);}
}/*
* 模拟IoC
*/
public class Test {private Car car;private FrameWork frameWork;private Bottom bottom;private Tire tire;public Test(){
//如果Tire有新的属性或参数,不需要修改上级对象,只需要在IoC中添加或修改相应的构造对象的参数
//而上述代码的实现就相当于我们平常实现的业务逻辑,这个Test就相当于Spring
//我们不需要担心对象的创建,那是由Spring控制的,而Spring可以根据我们提供的参数来匹配创建什么样的对象this.tire=new Tire(12);this.bottom=new Bottom(this.tire);this.frameWork=new FrameWork(this.bottom);this.car=new Car(this.frameWork);}public static void main(String[] args) {Test test=new Test();test.car.init();}
}

通过上述代码我们能发现一个规律: 

通过应用程序的实现代码,类的创建顺序是反的,传统代码是Car控制并创建了FrameWork,FraemWork控制并创建了Bottom,依次往下,而改进之后的控制权发生的反转,不再是上级对象创建并控制下级对象了,而是把下级对象注入到当前对象中,下级的控制权不再由上级控制了,这样即使下级类发生任何改变,当前类都是不受影响的,这就是典型的控制反转,也就是IoC思想

二. Spring 的创建

2.1 创建一个Maven 项目

2.2 添加Spring 框架支持

    <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.28</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.28</version></dependency></dependencies>

在resources下创建配置文件,以下内容为固定格式(但是文件名字可以随意命名)

<?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">
</beans>

三. SpringBoot 的创建

Idea 的社区版安装Spring Boot Helper 才能创建SpringBoot项目(旗舰版是不需要安装这个插件的),社区办的idea 不能使用2021.3之后的版本(之后的版本的Spring Boot Helper 插件需要通行证,只能使用一个月).

创建SpringBoot 项目,现在只支持jdk17,jdk21

3.1 创建 SpringBoot 项目

在里面勾选maven并点击ok,会自动生成一个pom.xml文件

这里可能会出现报错,因为我所配置的国内源中没有这个版本,直接将.RELEASE删掉,重新reload一下就好了. 

3.2 配置国内源

如果不配置就会导致Spring/Spring Boot 失败,或者是在maven项目中引入jar失败.

因为idea 有两份配置文件,如下图所示,所以再进行后续的配置中,要设置两次,分别给当前的项目和新项目中都进行相应的配置(只针对第一次创建Spring Boot)

 

上述两个路径不要带中文

若是有settings.xml文件将以下复制到<mirrors></mirrors>中,若是没有,可去自行下载:

   <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>        </mirror>

settings.xml

将本地的方法库删除,重新加载maven jar包

删除后重新加载

<!--		<dependency>-->
<!--			<groupId>org.springframework.boot</groupId>-->
<!--			<artifactId>spring-boot-starter</artifactId>-->
<!--		</dependency>--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

pom.xml中的是上述的一个,我们需要使用第二个把第一个依赖替换掉

运行出现以下内容说明创建成功了:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】强化学习(一)强化学习定义

文章目录 一、强化学习问题1、交互的对象1. 智能体&#xff08;Agent&#xff09;2. 环境&#xff08;Environment&#xff09; 2、强化学习的基本要素1. 状态 &#x1d460;2. 动作 &#x1d44e;3. 策略 &#x1d70b;(&#x1d44e;|&#x1d460;)4. 状态转移概率 &#x1…

[HITCON 2017]SSRFme perl语言的 GET open file 造成rce

这里记录学习一下 perl的open缺陷 这里首先本地测试一下 发现这里使用open打开 的时候 如果通过管道符 就会实现命令执行 然后这里注意的是 perl 中的get 调用了 open的参数 所以其实我们可以通过管道符实现命令执行 然后这里如果file可控那么就继续可以实现命令执行 这里就…

用23种设计模式打造一个cocos creator的游戏框架----(一)生成器模式

1、模式标准 模式名称&#xff1a;生成器模式 模式分类&#xff1a;创建型 模式意图&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 结构图&#xff1a; 适用于&#xff1a; 当创建复杂对象的算法应该独立于该对象的…

⭐Unity 搭建UDP客户端(01) 配合网络调试助手测试

1.接收来自服务器的消息 using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using UnityEngine;public class UDPManager:MonoBehaviour {public string recvStr; //服务器返回值public string UDPClientAddRess "192.168.2.39&q…

儿童护栏围栏CE认证EN1930检测标准

儿童门护栏也叫儿童游戏围栏&#xff0c;游戏围栏和儿童护栏&#xff0c;安全护栏等。市面上的儿童围栏以塑料&#xff0c;木质材料结构为主。主要作用是为了解放妈妈的双手&#xff0c;提供一个安全舒适的环境给6个月-3岁的宝宝。使用儿童围栏有利于培养宝宝的独立意识&#x…

深入探索C语言中的二叉树:数据结构之旅

引言 在计算机科学领域&#xff0c;数据结构是基础中的基础。在众多数据结构中&#xff0c;二叉树因其在各种操作中的高效性而脱颖而出。二叉树是一种特殊的树形结构&#xff0c;每个节点最多有两个子节点&#xff1a;左子节点和右子节点。这种结构使得搜索、插入、删除等操作…

C# 图解教程 第5版 —— 第17章 转换

文章目录 17.1 什么是转换17.2 隐式转换17.3 显示转换和强制转换17.4 转换的类型17.5 数字的转换17.5.1 隐式数字转换17.5.2 溢出检测上下文17.5.3 显示数字转换 17.6 引用转换17.6.1 隐式引用转换17.6.2 显式引用转换17.6.3 有效显式引用转换 17.7 装箱转换17.7.1 装箱是创建副…

概率测度理论方法(第 2 部分)

一、说明 欢迎回到这个三部曲的第二部分&#xff01;在第一部分中&#xff0c;我们为测度论概率奠定了基础。我们探索了测量和可测量空间的概念&#xff0c;并使用这些概念定义了概率空间。在本文中&#xff0c;我们使用测度论来理解随机变量。 作为一个小回顾&#xff0c;在第…

贪吃的猴子 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 一只贪吃的猴子&#xff0c;来到一个果园&#xff0c;发现许多串香蕉排成一行&#xff0c;每串香蕉上有若干根香蕉。每串香蕉的根数由数组numbers给出。猴子获取香…

flask web开发学习之初识flask(三)

文章目录 一、flask扩展二、项目配置1. 直接配置2. 使用配置文件3. 使用环境变量4. 实例文件夹 三、flask命令四、模版和静态文件五、flask和mvc架构 一、flask扩展 flask扩展是指那些为Flask框架提供额外功能和特性的库。这些扩展通常遵循Flask的设计原则&#xff0c;易于集成…

编程实战:自己编写HTTP服务器(系列2:请求)

系列入口&#xff1a;编程实战&#xff1a;自己编写HTTP服务器&#xff08;系列1&#xff1a;概述和应答&#xff09;-CSDN博客 本文介绍如何处理请求。 目录 一、概述 二、成员变量 三、接收并分解请求 四、完整代码 五、HTTP处理框架 一、概述 请求和应答结构其实差不多…

电子学会C/C++编程等级考试2021年03月(五级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:最小新整数 给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。 现在从m位中删除k位(0<k < m),求生成的新整数最小为多少? 例如: n = 9128456, k = 2, 则生成的新整数最小为12456…