日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

瀏覽:9日期:2023-03-25 18:36:15
SpringBoot 項(xiàng)目創(chuàng)建創(chuàng)建Module

基于IDEA創(chuàng)建項(xiàng)目Module,模塊名為04-springboot-start,組id和包名為com.cy,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

填寫module信息,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

選擇項(xiàng)目module版本,暫時不需要自己手動添加任何依賴,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

填寫Module名稱,完成module創(chuàng)建,如圖所示

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

項(xiàng)目結(jié)構(gòu)分析

項(xiàng)目Module創(chuàng)建好以后,其代碼結(jié)構(gòu)分析,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

SpringBoot 項(xiàng)目啟動分析啟動入口

SpringBoot 工程中由SpringBootApplication注解描述的類為啟動入口類,例如:

package com.cy;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application {//Application.class public static void main(String[] args) {//Main Thread SpringApplication.run(Application.class, args); }}啟動過程概要分析

SpringBoot工程啟動時其簡易初始化過程,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

在啟動過程中底層做了哪些事情,大致描述如下:

1)基于配置加載類(通過ClassLoader將指定位置的類讀到內(nèi)存->底層通過線程調(diào)用IO從磁盤讀取到內(nèi)存)。

2)對類進(jìn)行分析(創(chuàng)建字節(jié)碼對象-Class類型,通過反射獲取器配置信息)。

3)對于指定配置(例如由spring特定注解描述)的對象存儲其配置信息(借助BeanDefinition對象存儲)。

4)基于BeanDefinition對象中class的配置構(gòu)建類的實(shí)例(Bean對象),并進(jìn)行bean對象的管理(可能會存儲到bean池)。

SpringBoot 快速入門分析 業(yè)務(wù)描述

在項(xiàng)目Module中定義一個類,類名為DefaultCache,然后將此類對象交給Spring創(chuàng)建并管理。最后通過單元測試對類的實(shí)例進(jìn)行分析。

API設(shè)計(jì)分析

基于業(yè)務(wù)描述,進(jìn)行API及關(guān)系設(shè)計(jì),如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

代碼編寫及運(yùn)行

基于業(yè)務(wù)及API設(shè)計(jì),進(jìn)行代碼編寫,其過程如下:

第一步:定義DefaultCache類

package com.cy.pj.common.cache;import org.springframework.stereotype.Component;/** * @Component 注解描述的類,表示此類交給Spring框架管理。 */@Componentpublic class DefaultCache {}

第二步:定義DefaultCacheTests單元測試類

package com.cy.pj.common.cache;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;@SpringBootTestpublic class DefaultCacheTests { /** * @Autowired 注解描述的屬性由spring框架按照一定規(guī)則為其注入值(賦值) * 賦值過程是怎樣的? * 1)依賴查找?(請問查找規(guī)則是什么?) * 2)依賴注入?(需要借助什么技術(shù)?) */ @Autowired private DefaultCache defaultCache; @Test void testDefaultCache(){ System.out.println(defaultCache.toString()); //FAQ? defaultCache變量引用的對象是由誰創(chuàng)建的,存儲 到了哪里?bean pool }}

第三步:運(yùn)行單元測試類進(jìn)行應(yīng)用分析

啟動運(yùn)行單元測試方法,檢測其輸出結(jié)果,基于結(jié)果分析:

1)SpringBoot項(xiàng)目中Bean對象的構(gòu)建。

2)SpringBoot項(xiàng)目中Bean對象的獲取。

運(yùn)行過程中的BUG分析

Bean類型找不到,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

空指針異常(NullPointerExcetpion-NPE),如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

啟動類找不到,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

啟動類有多個,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

NoSuchBeanDefinition異常,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

單元測試類中的方法添加了參數(shù),如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

SpringBoot 項(xiàng)目中的對象特性分析準(zhǔn)備工作

第一步:創(chuàng)建項(xiàng)目Module,例如名字為05-springboot-features,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

第二步:添加業(yè)務(wù)類ObjectPool,代碼如下:

package com.cy.pj.common.pool;@Componentpublic class ObjectPool{//假設(shè)此對象為一個對象池 public ObjectPool(){//假設(shè)運(yùn)行項(xiàng)目啟動類,此構(gòu)造方法執(zhí)行了,說明此類對象構(gòu)建了。 Systemd.out.println('ObjectPool()') }}

思考:一般池對象有什么特點(diǎn)?

1)在JVM內(nèi)存會開辟一塊相對比較大的空間。

2)在這塊空間中存儲一些對象(思考基于什么存儲結(jié)構(gòu)進(jìn)行存儲-數(shù)組,鏈表,散列表)。

3)基于“享元模式”設(shè)計(jì)思想,實(shí)現(xiàn)內(nèi)存中對象的可重用性。

第三步:定義單元測試,代碼如下:

package com.cy.pj.pool;import com.cy.pj.common.pool.ObjectPool;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestpublic class ObjectPoolTests { @Autowired private ObjectPool objectPool01; @Autowired private ObjectPool objectPool02; @Test void testObjectPool01(){ System.out.println(objectPool01==objectPool02); }}延遲加載

現(xiàn)在思考一個問題,對于ObjectPool這個類,假如項(xiàng)目啟動以后,暫時不會用到這個池對象,是否有必要對其進(jìn)行創(chuàng)建(默認(rèn)是會創(chuàng)建的)?我們知道沒必要,因?yàn)檎加脙?nèi)存。那如何在啟動時不創(chuàng)建此類對象呢?借助Spring框架提供的延遲加載特性進(jìn)行實(shí)現(xiàn)。例如,我們可以在需要延遲加載的類上使用@Lazy注解進(jìn)行描述,代碼如下:

package com.cy.pj.common.pool;@Lazy@Componentpublic class ObjectPool{//假設(shè)此對象為一個對象池 public ObjectPool(){//假設(shè)運(yùn)行項(xiàng)目啟動類,此構(gòu)造方法執(zhí)行了,說明此類對象構(gòu)建了。 Systemd.out.println('ObjectPool()') }}

此時,我們再去運(yùn)行運(yùn)行啟動類,檢測ObjectPool對象是否創(chuàng)建了,假如沒有創(chuàng)建,說明延遲加載生效了。此時,我們總結(jié)一下,什么對象適合使用延遲加載特性呢?大對象,稀少用(項(xiàng)目啟動以后,暫時用不到)的對象。

注意:延遲加載并不是延遲對類進(jìn)行加載,而是在啟動時,暫時不創(chuàng)建類的實(shí)例。假如想看一下內(nèi)存中的類是否被加載了,可以通過JVM參數(shù)進(jìn)行檢測,參數(shù)為-XX:+TraceClassLoading。

對象作用域分析

在實(shí)際的項(xiàng)目中內(nèi)存中的對象有一些可能要反復(fù)應(yīng)用很多次,有一些可能用完以后再也不用了或者說應(yīng)用次數(shù)很少了。對于經(jīng)常要重復(fù)使用的對象我可考慮存儲到池中(例如交給spring框架進(jìn)行管理),應(yīng)用次數(shù)很少的對象那就沒必要放到池中了,用完以后讓它自己銷毀就可以了。在Spring項(xiàng)目工程中為了對這樣的對象進(jìn)行設(shè)計(jì)和管理,提供了作用域特性的支持,具體應(yīng)用:

package com.cy.pj.common.pool;@Scope('singleton')@Lazy@Componentpublic class ObjectPool{//假設(shè)此對象為一個對象池 public ObjectPool(){//假設(shè)運(yùn)行項(xiàng)目啟動類,此構(gòu)造方法執(zhí)行了,說明此類對象構(gòu)建了。 Systemd.out.println('ObjectPool()') }}

其中,在上面的代碼中,我們使用了@Scope注解對類進(jìn)行描述,用于指定類的實(shí)例作用域。不寫@Scope默認(rèn)就是單例(singleton)作用域,這個作用域會配合延遲加載(@Lazy)特性使用,表示此類的實(shí)例在需要時可以創(chuàng)建一份并且將其存儲到spring的容器中(Bean池),需要的時候從池中取,以實(shí)現(xiàn)對象的可重用。假如一些對象應(yīng)用次數(shù)非常少,可以考慮不放入池中,進(jìn)而使用@Scope('prototype')作用域?qū)︻愡M(jìn)行描述,讓此類的對象何時需要何時創(chuàng)建,用完以后,當(dāng)此對象不可達(dá)了,則可以直接被GC系統(tǒng)銷毀。

對象生命周期方法

程序中的每個對象都有生命周期,對象創(chuàng)建,初始化,應(yīng)用,銷毀的這個過程稱之為對象的生命周期。在對象創(chuàng)建以后要初始化,應(yīng)用完成以后要銷毀時執(zhí)行的一些方法,我們可以稱之為生命周期方法。但不見得每個對象都會定義生命周期方法。在實(shí)際項(xiàng)目中往往一些池對象通常會定義這樣的一些生命周期方法(例如連接池)。那這樣的方法在spring工程中如何進(jìn)行標(biāo)識呢?通常要借助@PostConstruct和@PreDestroy注解對特定方法進(jìn)行描述,例如:

package com.cy.pj.common.pool;@Scope('singleton')@Lazy@Componentpublic class ObjectPool{//假設(shè)此對象為一個對象池 public ObjectPool(){ Systemd.out.println('ObjectPool()') } @PostConstruct public void init(){ System.out.println('init()'); } @PreDestroy public void destory(){ System.out.println('destory()'); }}

其中:

1)@PostConstruct 注解描述的方法為生命周期初始化方法,在對象構(gòu)建以后執(zhí)行.

2)@PreDestroy 注解描述的方法為生命周期銷毀方法,此方法所在的對象,假如存儲到了spring容器,那這個對象在從spring容器移除之前會先執(zhí)行這個生命周期銷毀方法(prototype作用域?qū)ο蟛粓?zhí)行此方法).

SpringBoot 項(xiàng)目中的依賴注入過程分析

在SpringBoot工程中,假如類與類之間存在著一定的依賴關(guān)系,Spring是如何進(jìn)行依賴注入的呢,現(xiàn)在我們就通過一個案例做一個分析。

準(zhǔn)備工作

第一步:創(chuàng)建一個項(xiàng)目module,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

第二步:啟動運(yùn)行項(xiàng)目,檢測是否能成功啟動

案例設(shè)計(jì)及分析

為了更好理解spring框架的底層注入機(jī)制,現(xiàn)在進(jìn)行案例API設(shè)計(jì),如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

在這個案例中單元測試類CacheTests中定義一個Cache接口類型的屬性,然后由Spring框架完成對cache類型屬性值的注入。

代碼編寫及測試分析

第一步:定義Cache接口,代碼如下:

package com.cy.pj.common.cache;public interface Cache { }

第二步:定義Cache接口實(shí)現(xiàn)類SoftCache,代碼如下:

package com.cy.pj.common.cache; @Componentpublic class SoftCache implements Cache{}

第三步:定義Cache接口實(shí)現(xiàn)類WeakCache,代碼如下:

package com.cy.pj.common.cache; @Componentpublic class WeakCache implements Cache{}

第四步:定義CacheTests單元測試類,代碼如下:

package com.cy.pj.common.cache;import org.junit.jupiter.api.Test;@SpringBootTest public class CacheTests { @Autowired @Qualifier('softCache') private Cache cache; @Test public void testCache() { System.out.println(cache); }}

其中,@Autowired由spring框架定義,用于描述類中屬性或相關(guān)方法(例如構(gòu)造方法)。Spring框架在項(xiàng)目運(yùn)行時假如發(fā)現(xiàn)由他管理的Bean對象中有使用@Autowired注解描述的屬性或方法,可以按照指定規(guī)則為屬性賦值(DI)。其基本規(guī)則是:首先要檢測容器中是否有與屬性或方法參數(shù)類型相匹配的對象,假如有并且只有一個則直接注入。其次,假如檢測到有多個,還會按照@Autowired描述的屬性或方法參數(shù)名查找是否有名字匹配的對象,有則直接注入,沒有則拋出異常。最后,假如我們有明確要求,必須要注入類型為指定類型,名字為指定名字的對象還可以使用@Qualifier注解對其屬性或參數(shù)進(jìn)行描述(此注解必須配合@Autowired注解使用)。

第五步:運(yùn)行CacheTests檢測輸出結(jié)果,基于結(jié)果理解其注入規(guī)則。

編寫及測試過程中的BUG分析

依賴注入異常,如圖所示:

Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

總結(jié)(Summary)

本小節(jié)為springboot技術(shù)入門章節(jié),主要講述了SpringBoot工程下,spring中bean對象的編寫,特性以及依賴注入的規(guī)則,希望通過這一小節(jié)的講解,同學(xué)們能夠理解我們?yōu)槭裁匆獙ο蠼唤ospring管理,spring管理對象有什么優(yōu)勢,我們在springboot工程中應(yīng)該如何配置這些對象。

到此這篇關(guān)于Idea工具中創(chuàng)建 SpringBoot工程及入門分析詳解的文章就介紹到這了,更多相關(guān)idea創(chuàng)建 SpringBoot工程內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
九九99久久精品在免费线bt| 老鸭窝一区二区久久精品| 久久蜜桃精品| 国产精品福利在线观看播放| 国产一区调教| 日韩国产欧美一区二区| 亚洲国产影院| 久久亚洲不卡| 欧美精品国产| 一区二区精品伦理...| 亚洲91视频| 综合亚洲色图| 欧美aⅴ一区二区三区视频| 日韩理论视频| 亚洲在线成人| 久久精品72免费观看| 国产精成人品2018| 欧美香蕉视频| 欧美日韩国产精品一区二区亚洲| 六月天综合网| 国产精品黄网站| 色吊丝一区二区| 性色一区二区| 国产精品欧美日韩一区| 久久精品国语| 日本午夜免费一区二区| 成人精品国产亚洲| 日韩中文字幕一区二区三区| 国产亚洲精aa在线看| 日韩在线观看| 亚洲三级毛片| 97精品一区二区| 亚洲一区二区三区高清| 日韩高清一级| 亚洲风情在线资源| 亚洲精品成a人ⅴ香蕉片| 视频在线不卡免费观看| 视频一区视频二区中文字幕| 久久99免费视频| 性色av一区二区怡红| 高清精品久久| 日韩av午夜在线观看| 99精品电影| 欧美a级一区二区| 日韩精品一级中文字幕精品视频免费观看| 久久精品国产一区二区| 午夜亚洲福利| 999久久久国产精品| 国产亚洲欧美日韩在线观看一区二区 | 国产精品亚洲综合在线观看| 亚洲性视频h| 国产精品v日韩精品v欧美精品网站| 免费av一区| 精品国内亚洲2022精品成人| 久久av在线| 欧美激情另类| 国产欧美69| 老司机久久99久久精品播放免费| 欧美激情视频一区二区三区免费| 欧美日韩国产一区二区三区不卡| 国产精品www994| 亚洲欧美在线专区| 婷婷六月综合| 成人看片网站| 国产一区二区三区久久| 欧美中文一区| 亚洲麻豆一区| 老鸭窝毛片一区二区三区| 日韩欧美一区二区三区免费看| 国产精品久久久久久av公交车| 亚洲精品三级| 国产精品日本欧美一区二区三区| 98精品视频| 国产aⅴ精品一区二区四区| 国产乱码精品一区二区三区四区| 欧美精选一区二区三区| 久久久夜夜夜| 日韩精品免费一区二区三区| 91亚洲国产| av中文资源在线资源免费观看| 美女视频免费精品| 老司机精品视频在线播放| 国产日韩中文在线中文字幕 | 视频在线不卡免费观看| 麻豆极品一区二区三区| 国产伦精品一区二区三区视频 | 日韩高清不卡一区二区| 亚洲图片久久| 日韩影院在线观看| 日韩影院免费视频| 亚洲深深色噜噜狠狠爱网站| 视频精品一区二区| 亚洲精品激情| 日韩精品亚洲专区| 日本成人在线视频网站| 日韩av资源网| 青青草伊人久久| 日韩中文一区二区| 国产亚洲一区| 精品在线网站观看| 欧美xxxx中国| 91精品久久久久久久久久不卡| 欧美99久久| 久久福利精品| 97精品久久| 久久不见久久见中文字幕免费| 国产一区二区三区视频在线| 精品欧美一区二区三区在线观看| 99精品美女| 欧美专区18| 69堂精品视频在线播放| 久久wwww| 精品免费av在线| 亚洲欧美成人综合| 欧美亚洲tv| 国产精品蜜芽在线观看| 91成人精品视频| 日韩欧美2区| 成人台湾亚洲精品一区二区| 成人羞羞视频播放网站| 亚洲免费中文| 国产精品www.| 国内精品99| 日本99精品| www.九色在线| 国产精品老牛| 国产欧美日韩视频在线| 成人国产精品久久| 免费中文字幕日韩欧美| 国产亚洲欧美日韩在线观看一区二区 | 国产福利资源一区| 三上悠亚国产精品一区二区三区| 午夜在线一区| 国产精品高清一区二区| av一区在线| 日韩av黄色在线| 亚洲91视频| 日韩高清不卡一区| 日韩毛片视频| 亚洲精品一二| 麻豆视频在线观看免费网站黄 | 午夜亚洲精品| 国内精品麻豆美女在线播放视频| 亚洲国产日韩欧美在线| 国产精品中文| 一区福利视频| 国产精品s色| 好吊日精品视频| 国产精品超碰| 一本一本久久| 精品国产精品国产偷麻豆| 欧美1级日本1级| 欧美精品99| 午夜在线观看免费一区| 色婷婷色综合| 欧美三级第一页| 国产精品美女久久久浪潮软件| 麻豆一区二区99久久久久| 亚洲一区二区三区免费在线观看| 久久亚洲资源中文字| 国产视频亚洲| av高清不卡| 欧美日韩91| 热久久国产精品| 成人羞羞视频播放网站| 国产精品亚洲欧美| 老牛国产精品一区的观看方式| 麻豆视频在线观看免费网站黄| 青青在线精品| 蜜桃一区二区三区在线| 久久亚洲国产| 中文在线资源| 美腿丝袜亚洲一区| 青青草国产成人99久久| 丝袜a∨在线一区二区三区不卡| 成人福利av| 久久爱www成人| 97久久亚洲| 亚洲三级国产| 日韩精品一二三区| 在线视频免费在线观看一区二区| 中文字幕高清在线播放| 国产精品久久久久av蜜臀| 日韩一区精品| 亚洲精品福利| 亚洲一级淫片| 中文国产一区| 91超碰国产精品| 在线视频观看日韩| 免费高潮视频95在线观看网站| 麻豆高清免费国产一区| 国产精品一区二区av交换| 日韩欧美在线精品| 日本不卡一区二区| 日本不卡高清| 欧美在线不卡| 日韩一区二区三区免费视频| 香蕉视频成人在线观看| 国产亚洲一级| 亚洲激情婷婷|