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.mzph.cn/news/215586.shtml

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

相关文章

内存cache大量使用问题导致应用异常问题

概述 28s应用崩溃查看内存使用有大量cache。 分析 查看free 信息平时的确存在大量cache使用的情况查看dmes信息发现filesendserver崩溃 崩溃信息为系统调用 查看到page allocation failure:order 5 同时也看到系统内存使用情况 查看到系统实际还有部分内存为空闲内存&am…

[笔记] 使用 qemu/grub 模拟系统启动(单分区)

背景 最近在学习操作系统&#xff0c;需要从零开始搭建系统&#xff0c;由于教程中给的虚拟机搭建的方式感觉还是过于重量级&#xff0c;因此研究了一下通过 qemu 模拟器&#xff0c;配合 grub 完成启动系统的搭建。 qemu 介绍 qemu 是一款十分优秀的系统模拟器&#xff0c;…

Linux上进行Nacos安装

Nacos安装指南 仅供参考&#xff0c;若有错误&#xff0c;欢迎批评指正&#xff01; 后期会继续上传docker安装nacos的过程&#xff01; 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好…

手动搭建koa+ts项目框架(日志篇)

文章目录 前言一、安装koa-logger二、引入koa-logger并使用总结如有启发&#xff0c;可点赞收藏哟~ 前言 本文基于手动搭建koats项目框架&#xff08;路由篇&#xff09;新增日志记录 一、安装koa-logger npm i -S koa-onerror and npm i -D types/koa-logger二、引入koa-lo…

【每日一题】【12.11】1631.最小体力消耗路径

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 1631. 最小体力消耗路径https://leetcode.cn/problems/path-with-minimum-effort/这道题目的核心思路是&#xff1a;使用了二分查找和BFS &a…

EXPLAIN 执行计划

有了慢查询语句后&#xff0c;就要对语句进行分析。一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划&#xff0c;这个执行计划展示了接下来具体执行查询的方式&#xff0c;比如多表连接的顺序是什么&#xff0c;对于每个表采用什么访…

记录 DevEco 开发 HarmonyOS 应用开发问题记录 【持续更新】

HarmonyOS 应用开发问题记录 HarmonyOS 应用开发问题记录一、预览器无法成功运行?如何定位预览器无法编译问题? 开发遇到的问题 HarmonyOS 应用开发问题记录 一、预览器无法成功运行? 大家看到这个是不是很头疼? 网上能看到许多方案,基本都是关闭一个配置 但是他们并…

【Java SE】带你识别什么叫做异常!!!

&#x1f339;&#x1f339;&#x1f339;个人主页&#x1f339;&#x1f339;&#x1f339; 【&#x1f339;&#x1f339;&#x1f339;Java SE 专栏&#x1f339;&#x1f339;&#x1f339;】 &#x1f339;&#x1f339;&#x1f339;上一篇文章&#xff1a;【Java SE】带…

Android获取Wifi网关

公司有这样一个应用场景&#xff1a;有一台球机设备&#xff0c;是Android系统的&#xff0c;它不像手机&#xff0c;它没有触摸屏幕&#xff0c;所以我们对球机的操作很不方便&#xff0c;于是我们搞这样一个设置&#xff1a;点击球机电源键5次分享出一个热点&#xff0c;然后…

【JVM从入门到实战】(一) 字节码文件

一、什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。 JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 二、JVM的功能 解释和运行 对字节码文件中的指令&#xff0c;实时的解释成机器码&#xff0c;让计算机…

微信小程序:模态框(弹窗)的实现

效果 wxml <!--新增&#xff08;点击按钮&#xff09;--> <image classimg src"{{add}}" bindtapadd_mode></image> <!-- 弹窗 --> <view class"modal" wx:if"{{showModal}}"><view class"modal-conten…

差生文具多系列之最好看的编程字体

&#x1f4e2; 声明&#xff1a; &#x1f344; 大家好&#xff0c;我是风筝 &#x1f30d; 作者主页&#xff1a;【古时的风筝CSDN主页】。 ⚠️ 本文目的为个人学习记录及知识分享。如果有什么不正确、不严谨的地方请及时指正&#xff0c;不胜感激。 直达博主&#xff1a;「…

【文心一言】AI试用写代码体会:delphi、php

一、前言&#xff1a; 二、让【文心一言】编写一个函数 1. Delphi 语言&#xff08;文心一言的回复&#xff09; 2. php 语言&#xff08;文心一言回复&#xff09; 三、总结 一、前言&#xff1a; 众所周知&#xff0c;chatGPT是可以自动编写程序的&#xff0c;甚至可以运…

MyBatis缓存机制流程分析

前言 在进行分析之前&#xff0c;建议快速浏览之前写的理解MyBatis原理、思想&#xff0c;这样更容易阅读、理解本篇内容。 验证一级缓存 MyBatis的缓存有两级&#xff0c;一级缓存默认开启&#xff0c;二级缓存需要手动开启。 重复读取跑缓存 可以看到&#xff0c;第二次…

OpenAI承认GPT-4变懒,即将发布修复方案提升性能

目录 1OpenAI承认GPT-4变懒&#xff0c;即将发布修复方案提升性能 2一文秒懂人工智能全球近况 1OpenAI承认GPT-4变懒&#xff0c;即将发布修复方案提升性能 **划重点:** 1. &#x1f92f; 用户反馈:GPT-4使用者抱怨OpenAI破坏了体验&#xff0c;称模型几乎“害怕”提供答案。…

Wireshark使用技巧

Wireshark作为网络数据软件&#xff0c;功能强大&#xff0c;本专栏介绍仅为冰山一角&#xff0c;仅仅是一个入门级别的介绍&#xff0c;大部分功能还需要在日常工作中进行挖掘。 总结Wireshark软件的使用技巧如下&#xff1a; 1.合理部署Wireshark的位置&#xff0c;从源头保障…

基于Java SSM框架实现电影售票系统项目【项目源码+论文说明】

基于java的SSM框架实现电影售票系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#…

界面控件DevExpress WPF导航组件,助力升级应用程序用户体验!(下)

DevExpress WPF的Side Navigation&#xff08;侧边导航&#xff09;、TreeView、导航面板组件能帮助开发者在WPF项目中添加Windows样式的资源管理器栏或Outlook NavBar&#xff08;导航栏&#xff09;&#xff0c;DevExpress WPF NavBar和Accordion控件包含了许多开发人员友好的…

HTTP详解

1. web 1.1 web相关概念 软件架构 C /S&#xff1a;客户端/服务器端 需要安装客户端应用 B/S&#xff1a;浏览器/服务器端 不需要安装客户端应用&#xff0c;对于用户来说只需要记住域名访问就可以,高效,客户端零维护 资源分类 静态资源&#xff1a;所有用户访问后&#x…

数据库系统原理与实践 笔记 #12

文章目录 数据库系统原理与实践 笔记 #12事务管理和并发控制与恢复(续)并发控制SQL-92中的并发级别基于锁的协议基于锁的协议的隐患锁的授予封锁协议两阶段封锁协议多粒度粒度层次的例子意向锁类型相容性矩阵多粒度封锁模式基于时间戳的协议基于时间戳协议的正确性基于有效性检…