亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot啟動類@SpringBootApplication注解背后的秘密

 更新時間:2020年12月04日 16:05:00   作者:怪咖軟妹@  
這篇文章主要介紹了SpringBoot啟動類@SpringBootApplication注解背后的秘密,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在用SpringBoot的項目的時候,會發(fā)現(xiàn)不管干什么都離不開啟動類,他是程序唯一的入口,那么他究竟為我們做了什么?本篇文章主要解析@SpringBootApplication。

一、啟動類

@SpringBootApplication
public class Application {
	
	public static void main(String[] args) { 
		SpringApplication.run(Application.class,args); 
	}
	
}

二、@SpringBootApplication

@SpringBootApplication: Spring Boot應用標注在某個類上說明這個類是SpringBoot的主配置類,

SpringBoot 就應該運行這個類的main方法來啟動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 {

}

點進去會發(fā)現(xiàn)他的注解類當中還有很多注解,就是一個自定義組合注解。

接下來來對他組合的注解一一講解。

1、@Target(ElementType.TYPE)

@Target說明了Annotation(注解)所修飾的對象范圍
取值(ElementType)有:

1.CONSTRUCTOR:用于描述構造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部變量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述參數(shù)
7.TYPE:用于描述類、接口(包括注解類型) 或enum聲明

2、@Retention(RetentionPolicy.RUNTIME)

注解按生命周期來劃分可分為3類:

1、RetentionPolicy.SOURCE:注解只保留在源文件,當Java文件編譯成class文件的時候,注解被遺棄;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加載class文件時候被遺棄,這是默認的生命周期;
3、RetentionPolicy.RUNTIME:注解不僅被保存到class文件中,jvm加載class文件之后,仍然存在;

3、@Documented

這個注解只是用來標注生成javadoc的時候是否會被記錄。

在自定義注解的時候可以使用@Documented來進行標注,如果使用@Documented標注了,在生成javadoc的時候就會把@Documented注解給顯示出來。

4、@Inherited

@Inherited是一個標識,用來修飾注解,自定義注解當中會用到

首先自定義一個注解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ATable {
  public String name() default "";
}

以下是在使用自定義注解的一個場景。

類繼承關系中@Inherited的作用
類繼承關系中,子類會繼承父類使用的注解中被@Inherited修飾的注解

@ATable 
public class InheritedBase {
}
public class MyInheritedClass extends InheritedBase {
}

接口繼承關系中@Inherited的作用
接口繼承關系中,子接口不會繼承父接口中的任何注解,不管父接口中使用的注解有沒有被@Inherited修飾

@ATable
public interface IInheritedInterface {
}
public interface IInheritedInterfaceChild extends IInheritedInterface {
}

類實現(xiàn)接口關系中@Inherited的作用
類實現(xiàn)接口時不會繼承任何接口中定義的注解

@ATable
public interface IInheritedInterface {
}
public class MyInheritedClassUseInterface implements IInheritedInterface {
}

5、@SpringBootConfiguration

標注在某個類上,表示這是一個Spring Boot的配置類

點進去會發(fā)現(xiàn),他其實也是一個自定義注解

@Configuration學spring的應該對他不陌生
作用:指定當前類是一個配置類,在使用spring的時候剛開始都是xml配置,也正是這個注解,開啟了類配置方式。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}

6、@EnableAutoConfiguration

以前我們需要配置的東西,Spring Boot會幫我們自動配置;

@EnableAutoConfiguration告訴SpringBoot開啟自 動配置功能;這樣自動配置才能生效;

點進去會發(fā)現(xiàn)@Import,說白了他就是借助@Import的支持,收集和注冊特定場景相關的bean定義。

@Import作用:用于導入其他的配置類

而@EnableAutoConfiguration也是借助@Import的幫助,將所有符合自動配置條件的bean定義加載到IoC容器,僅此而已!

@SuppressWarnings("deprecation")
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

}

EnableAutoConfigurationImportSelector:導入哪些組件的選擇器;
會給容器中導入非常多的自動配置類(xxxAutoConfiguration);

在這里插入圖片描述

大概的流程就是:

Spring Boot在啟動的時候,通過EnableAutoConfigurationImportSelector類,從類路徑下的
META-INF/spring.factories中獲取EnableAutoConfiguration指定的值(就是上方截圖),
以全類名反射的創(chuàng)建方式,將這些值作為自動配置類導入到容器中,自動配置類就生效,
幫我們進行自動配置工作;

以前我們需要自己配置的東西,自動配置類都幫我們配置好了,這也就是使用springboot在使用spring,springmvc不用配置視圖解析器、數(shù)據(jù)庫連接池、事務 等配置的原因。直接開箱即用。

當然springboot也給我提供了修改配置的方法,那就是通過yml或者propertie文件來進行修改springboot為我們配置好的配置默認值。

7、@ComponentScan

作用:用于通過注解指定spring在創(chuàng)建容器時要掃描的包

我們可以通過basePackages等屬性來細粒度的定制@ComponentScan自動掃描的范圍,如果不指定,則默認Spring框架實現(xiàn)會從聲明@ComponentScan所在類的package進行掃描。

@ComponentScan("com.gzl")

這也就是springboot啟動類為什么放在包外的原因。

三、不使用這個注解能否啟動項目

把@SpringBootApplication換成以下三個注解,照樣可以正常啟動。

package com.gzl.cn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
	
	public static void main(String[] args) { 
		SpringApplication.run(Application.class,args); 
	}
	
}

到此這篇關于SpringBoot啟動類@SpringBootApplication注解背后的秘密的文章就介紹到這了,更多相關@SpringBootApplication注解背后的秘密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot使用Redis實現(xiàn)分布式緩存

    SpringBoot使用Redis實現(xiàn)分布式緩存

    這篇文章主要介紹了SpringBoot redis分布式緩存實現(xiàn)過程解析,文中通過示例代碼解析的非常詳細,感興趣的同學可以參考閱讀
    2023-04-04
  • 關于快速測試API接口的一個新技能

    關于快速測試API接口的一個新技能

    這篇文章主要給大家介紹了關于快速測試API接口的一個新技能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06
  • SpringCloud中的openFeign調(diào)用服務并傳參的過程

    SpringCloud中的openFeign調(diào)用服務并傳參的過程

    服務和服務之間通信,不僅僅是調(diào)用,往往在調(diào)用過程中還伴隨著參數(shù)傳遞,接下來重點來看看OpenFeign在調(diào)用服務時如何傳遞參數(shù),感興趣的朋友一起看看吧
    2023-11-11
  • java實現(xiàn)簡單日期計算功能

    java實現(xiàn)簡單日期計算功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單日期計算功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • JS求多個數(shù)組的重復數(shù)據(jù)

    JS求多個數(shù)組的重復數(shù)據(jù)

    這篇文章主要介紹了JS求多個數(shù)組的重復數(shù)據(jù)的辦法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java設計模式之命令模式(Command模式)介紹

    Java設計模式之命令模式(Command模式)介紹

    這篇文章主要介紹了Java設計模式之命令模式(Command模式)介紹,本文講解了Command模式的定義、如何使用命令模式等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • IDEA一鍵生成方法的序列圖神操作

    IDEA一鍵生成方法的序列圖神操作

    為了能夠更快更清晰地搞清對象之間的調(diào)用關系,我經(jīng)常需要用到序列圖。手動畫序列圖還是很麻煩費時的,不過?IDEA?提供了一個叫做SequenceDiagram?的插件幫助我們解決這個問題。通SequenceDiagram?這個插件,我們一鍵可以生成時序圖
    2022-01-01
  • Javafx簡單實現(xiàn)【我的電腦資源管理器】效果

    Javafx簡單實現(xiàn)【我的電腦資源管理器】效果

    這篇文章主要介紹了Javafx簡單實現(xiàn)【我的電腦資源管理器】效果,涉及Javafx操作系統(tǒng)文件模擬資源管理器的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • java設置session過期時間的實現(xiàn)方法

    java設置session過期時間的實現(xiàn)方法

    這篇文章主要介紹了java設置session過期時間的實現(xiàn)方法,以實例形式詳細講述了具體實現(xiàn)過程,非常具有參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • MyBatis-Plus?實體類注解的實現(xiàn)示例

    MyBatis-Plus?實體類注解的實現(xiàn)示例

    MyBatis-Plus作為MyBatis的增強版,提供了一系列實用的注解,如@TableName、@TableId、@TableField等,旨在簡化數(shù)據(jù)庫和Java實體類之間的映射及CRUD操作,通過這些注解,開發(fā)者可以輕松實現(xiàn)表映射、字段映射、邏輯刪除、自動填充和樂觀鎖等功能
    2024-09-09

最新評論