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.pswp.cn/news/215586.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215586.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215586.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內存cache大量使用問題導致應用異常問題

概述 28s應用崩潰查看內存使用有大量cache。 分析 查看free 信息平時的確存在大量cache使用的情況查看dmes信息發現filesendserver崩潰 崩潰信息為系統調用 查看到page allocation failure:order 5 同時也看到系統內存使用情況 查看到系統實際還有部分內存為空閑內存&am…

【Android開發-26】Android中服務Service詳細講解

1&#xff0c;service的生命周期 Android中的Service&#xff0c;其生命周期相較Activity來說更為簡潔。它也有著自己的生命周期函數&#xff0c;系統會在特定的時刻調用對應的Service生命周期函數。 具體來說&#xff0c;Service的生命周期包含以下幾個方法&#xff1a; on…

[筆記] 使用 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;可以下載編譯好…

《C++新經典設計模式》之第7章 單例模式

《C新經典設計模式》之第7章 單例模式 單例模式.cpp 單例模式.cpp #include <iostream> #include <memory> #include <mutex> #include <vector> #include <atomic> using namespace std;// 懶漢式&#xff0c;未釋放 namespace ns1 {class Gam…

手動搭建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…

PHP基礎(2)

目錄 一、PHP 數據類型 二、PHP 字符操作函數 strlen() str_word_count() strrev() strpos() str_replace() 一、PHP 數據類型 PHP 有八種基本數據類型和兩種復合數據類型&#xff1a; 整型&#xff08;int&#xff09;&#xff1a;表示整數&#xff0c;可以是正數或負數&am…

線程Thread源代碼思想學習1

1.啟動線程代碼 public class MultiThreadExample {public static void main(String[] args) {// 創建兩個線程對象Thread thread1 new Thread(new Task());Thread thread2 new Thread(new Task());// 啟動線程thread1.start();thread2.start();} }class Task implements Ru…

EXPLAIN 執行計劃

有了慢查詢語句后&#xff0c;就要對語句進行分析。一條查詢語句在經過 MySQL 查詢優化器的各種基于成本和規則的優化會后生成一個所謂的執行計劃&#xff0c;這個執行計劃展示了接下來具體執行查詢的方式&#xff0c;比如多表連接的順序是什么&#xff0c;對于每個表采用什么訪…

記錄 DevEco 開發 HarmonyOS 應用開發問題記錄 【持續更新】

HarmonyOS 應用開發問題記錄 HarmonyOS 應用開發問題記錄一、預覽器無法成功運行?如何定位預覽器無法編譯問題? 開發遇到的問題 HarmonyOS 應用開發問題記錄 一、預覽器無法成功運行? 大家看到這個是不是很頭疼? 網上能看到許多方案,基本都是關閉一個配置 但是他們并…

InitializingBean初始化--Spring容器管理

目錄 InitializingBean--自動執行一些初始化操作spring初始化bean有兩種方式&#xff1a;1.優點2.缺點2.PostConstruct 注解2.舉例使用InitializingBean接口 和PostConstruct3.初始化交給容器管理4.與main入口函數有什么區別5.在 Spring 中&#xff0c;有兩種主要的初始化 bean…

【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;讓計算機…

C++類模板不是一開始就創建的,而是調用時生成

類模板中的成員函數和普通類中成員函數創建時機有區別的&#xff1a; 普通類中的成員函數一開始就可以創建模板類中的成員函數調用的時候才可以創建 總結;類模板中的成員函數并不是一開始就創建的&#xff0c;再調用時才去創建 #include<iostream> using namespace st…

微信小程序:模態框(彈窗)的實現

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

Vue中$props、$attrs和$listeners的使用詳解

文章目錄 透傳屬性如何禁止“透傳屬性和事件”多根節點設置透傳訪問“透傳屬性和事件” $props、$attrs和$listeners的使用詳解 透傳屬性 透傳屬性和事件并沒有在子組件中用props和emits聲明透傳屬性和事件最常見的如click和class、id、style當子組件只有一個根元素時&#xf…

jOOQ指南中使用的數據庫

jOOQ指南中使用的數據庫 本指南中使用的數據庫將在本節中進行總結和創建 使用Oracle方言來創建 # 創建語言 CREATE TABLE language (id NUMBER(7) NOT NULL PRIMARY KEY,cd CHAR(2) NOT NULL,description VARCHAR2(50) );# 創建作者 CREATE TABLE author (id NUMBER(7) NOT …

mysql:需要準確存儲的帶小數的數據,要使用DECIMAL類型

需要準確存儲的帶小數的數據&#xff0c;要使用DECIMAL&#xff0c;特別是涉及金錢類的業務。而不要使用FLOAT或者DOUBLE。 因為DECIMAL是準確值&#xff0c;不會損失精度。 而FLOAT或者DOUBLE是近似值&#xff0c;會損失精度。 https://dev.mysql.com/doc/refman/8.2/en/fixe…