最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot入口類和@SpringBootApplication講解

 更新時間:2022年03月21日 11:06:48   作者:程序新視界  
這篇文章主要介紹了SpringBoot入口類和@SpringBootApplication講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

入口類和@SpringBootApplication

SpringBoot項目創(chuàng)建完成之后默認會生成一個*Application的入口類,通過該類的main方法即可啟動SpringBoot項目。

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class SpringbootRunApplication {
?? ?public static void main(String[] args) {
?? ??? ?SpringApplication.run(SpringbootRunApplication.class, args);
?? ?}
}

在此入口類中,我們可以看到SpringBoot創(chuàng)建的業(yè)務代碼中(除單元測試)唯一的一個注解——@SpringBootApplication,這也是SpringBoot的核心注解。

源代碼如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
?? ??? ?@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
?? ??? ?@Filter(type = FilterType.CUSTOM,
?? ??? ??? ??? ?classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
?? ?/**
?? ? * 根據(jù)類排除不使用的自動配置
?? ? */
?? ?@AliasFor(annotation = EnableAutoConfiguration.class)
?? ?Class<?>[] exclude() default {};
?? ?/**
?? ? * 根據(jù)類名排除不使用的自動配置
?? ? */
?? ?@AliasFor(annotation = EnableAutoConfiguration.class)
?? ?String[] excludeName() default {};
?? ?/**
?? ? * 指定掃描的包
?? ? */
?? ?@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
?? ?String[] scanBasePackages() default {};
?? ?/**
?? ? * 指定掃描的類
?? ? */
?? ?@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
?? ?Class<?>[] scanBasePackageClasses() default {};
}

該注解自身為我們提供了四個可配置項:

  • exclude:根據(jù)類排除不使用的自動配置;
  • excludeName:根據(jù)類名排除不使用的自動配置;
  • scanBasePackages:掃描指定的包;
  • scanBasePackageClasses:掃描指定的類;

@SpringBootApplication組合了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan,因此我們也可以直接使用這三個注解來替代它。

在早期版本并沒有@SpringBootConfiguration,之后使用了@SpringBootConfiguration并在其中組合了@Configuration注解。在@EnableAutoConfiguration注解中組合了@AutoConfigurationPackage。

@ComponentScan相關使用

@ComponentScan用來指定掃描的組建所在的包路徑或class文件。在不指定參數(shù)的時候,SpringBoot的@ComponentScan默認會掃描同目錄及同目錄下級目錄的類文件。通過部分源碼我們可以明確的看到。

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
??
? ? @AliasFor("basePackages")
? ? String[] value() default {};
? ? @AliasFor("value")
? ? String[] basePackages() default {};
? ? ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;
? ? String resourcePattern() default “**/*.class";
? ? // 省略掉部分源碼
}

上面的源碼重點看一下屬性resourcePattern的默認值“**/*.class”,可以看出,如果不指定其他參數(shù)的話,默認會去尋找同級目錄下的class。

在構(gòu)造SpringBoot項目時,往往會出現(xiàn)這樣一種情況:因為忘記或不知道SpringBoot默認掃描的路徑,隨意創(chuàng)建包和類的位置,導致項目啟動之后,無法實例化對應的組建,無法正確訪問接口。

當然,如果是有意為之,那么我們就可以使用@SpringBootApplication或@ComponentScan來指定一些特殊的需要實例化的包或類。

@SpringBootApplication(scanBasePackages = “com.secbro2.controller")
// 或
@ComponentScan(basePackages = "com.secbro2.controller")

@EnableAutoConfiguration

@EnableAutoConfiguration讓SpringBoot可以根據(jù)類路徑中的jar包依賴可以為項目進行一些自動配置。這也是SpringBoot最核心的功能。當然,前提條件是依賴需要按照starter的規(guī)則來構(gòu)建。

比如,我們添加了web的starter,那么SpringBoot就會自動添加Tomcat和SpringMVC的依賴,然后又會進行一些相應的默認配置。但有些依賴需要我們自己去配置一些內(nèi)容,比如雖然引入了data-jpa的starter,但是如果我們不配置對應的數(shù)據(jù)源,程序肯定沒辦法正常啟動。

關閉自動配置

自動配置有它的便捷之處,但在某些情況下,我們可能并不需要一些自動配置。比如,雖然引入了data-jpa的依賴,但此刻并不需要連接數(shù)據(jù)庫。那么,就可以通過注解將此自動配置進行關閉。@SpringBootApplication為我們提供了相應的功能。

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

為什么是SpringBoot

面試中可能會被問到:為什么我們要使用SpringBoot?

你可能會說:因為SpringBoot用java配置替代了xml配置,或因為它內(nèi)置Tomcat,可以直接打成jar包,通過java -jar快速啟動等;但這都不是重點,重點是剛剛說的@EnableAutoConfiguration實現(xiàn)的功能:自動配置?;诰幊痰囊粋€共識:約定優(yōu)于配置。這也正是SpringBoot的核心。

回想一下,在使用SpringBoot的過程中,當用到某個組件,只需引入相應的依賴(starter)。此時SpringBoot已經(jīng)幫我們把相關的依賴引入,配置好最基本的參數(shù)。然后我們根據(jù)需要再在application.yml文件中配置一些明確的參數(shù)(比如:數(shù)據(jù)庫地址、用戶名等),就完成了一個組件的集成,可以專注業(yè)務代碼的編寫了。

SpringBoot主程序類,主入口類

主程序類,主入口類

/**
?* @SpringBootApplication 來標注一個主程序類,說明這是一個Spring Boot應用
?*/
@SpringBootApplication
public class HelloWorldMainApplication {
? ? public static void main(String[] args) {
? ? ? ? SpringApplication.run(HelloWorldMainApplication.class,args);
? ? }
}
  • @SpringBootApplication:Spring Boot應用標注在某個雷尚說明這個類是Spring Boot的主配置類,Spring Boot就應該允許這個類的main方法來啟動SpringBoot應用;
  • @SpringBootConfiguration:SpringBoot的配置類;表追在某個類上,標識這是一個SpringBoot的配置類@Configuration: 配置雷尚來標注這個注解

配置類----配置文件;配置類也是容器中的一個組件;@Component

  • @EnableAutoConfiguration:開啟自動配置功能,以前我們需要配置的東西,SpringBoot開啟自動配置功能;這樣自動配置才能生效;
  • @AutoConfigurationPackage:自動配置包
@Import(AutoConfigurationPackages.Registrar.class);

Spring的底層注解@import,給容器中導入一個組件;導入 的組件由AutoConfigurationPackages.Registrar.class

將主配置類(@SpringBootApplication標注的類)的所有包及下面所有組件掃描到Spring容器;

@Import(AutoConfigurationPackages.Registrar.class);

給容器中導入組件

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 詳細解讀Java編程中面向字符的輸入流

    詳細解讀Java編程中面向字符的輸入流

    這篇文章主要介紹了Java中面向字符的輸入和輸出流,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2015-10-10
  • Spring Boot的FailureAnalyzer機制及如何解救應用啟動危機

    Spring Boot的FailureAnalyzer機制及如何解救應用啟動危機

    本文探討了FailureAnalyzer工具,它不僅能幫助我們快速識別和處理代碼中的錯誤,還能極大地提升我們的開發(fā)效率,通過詳細的實例分析,我們了解了FailureAnalyzer如何通過自定義邏輯應對不同類型的異常,讓程序員能夠更好地定位問題并迅速找到解決方案,感興趣的朋友一起看看吧
    2025-01-01
  • 最新評論

    平陆县| 阿合奇县| 水城县| 诸城市| 延长县| 五河县| 师宗县| 贞丰县| 滦平县| 昌图县| 津南区| 黔东| 额敏县| 罗城| 山阳县| 香港 | 田林县| 嘉善县| 松溪县| 漠河县| 阿巴嘎旗| 石楼县| 弥勒县| 满洲里市| 威信县| 邳州市| 璧山县| 大同县| 南召县| 手游| 封丘县| 盈江县| 富裕县| 揭阳市| 枣强县| 清流县| 拉萨市| 琼结县| 乌什县| 张家川| 嘉定区|