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

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

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

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

一、啟動類

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

二、@SpringBootApplication

@SpringBootApplication: Spring Boot應(yīng)用標(biāo)注在某個類上說明這個類是SpringBoot的主配置類,

SpringBoot 就應(yīng)該運行這個類的main方法來啟動SpringBoot應(yīng)用;

相關(guān)配置啟動都是由該注解來幫我們完成的,點進去了解一下

@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)他的注解類當(dāng)中還有很多注解,就是一個自定義組合注解。

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

1、@Target(ElementType.TYPE)

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

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

2、@Retention(RetentionPolicy.RUNTIME)

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

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

3、@Documented

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

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

4、@Inherited

@Inherited是一個標(biāo)識,用來修飾注解,自定義注解當(dāng)中會用到

首先自定義一個注解

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

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

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

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

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

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

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

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

5、@SpringBootConfiguration

標(biāo)注在某個類上,表示這是一個Spring Boot的配置類

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

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

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

}

6、@EnableAutoConfiguration

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

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

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

@Import作用:用于導(dǎo)入其他的配置類

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

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

}

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

在這里插入圖片描述

大概的流程就是:

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

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

當(dāng)然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); 
	}
	
}

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

相關(guān)文章

  • 一文帶你學(xué)會Java網(wǎng)絡(luò)編程

    一文帶你學(xué)會Java網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)編程是指編寫運行在多個設(shè)備(計算機)的程序,這些設(shè)備都通過網(wǎng)絡(luò)連接起來。這篇文章將帶大家深入了解一下Java的網(wǎng)絡(luò)編程,需要的可以了解一下
    2022-08-08
  • Java中實現(xiàn)將jar包內(nèi)文件資源釋放出來

    Java中實現(xiàn)將jar包內(nèi)文件資源釋放出來

    這篇文章主要介紹了Java中實現(xiàn)將jar包內(nèi)文件資源釋放出來的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解Spring AOP 實現(xiàn)主從讀寫分離

    詳解Spring AOP 實現(xiàn)主從讀寫分離

    本篇文章主要介紹了Spring AOP 實現(xiàn)主從讀寫分離,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 基于Quartz定時調(diào)度任務(wù)(詳解)

    基于Quartz定時調(diào)度任務(wù)(詳解)

    下面小編就為大家?guī)硪黄赒uartz定時調(diào)度任務(wù)(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 10個Java解決內(nèi)存溢出OOM的方法詳解

    10個Java解決內(nèi)存溢出OOM的方法詳解

    在Java開發(fā)過程中,有效的內(nèi)存管理是保證應(yīng)用程序穩(wěn)定性和性能的關(guān)鍵,不正確的內(nèi)存使用可能導(dǎo)致內(nèi)存泄露甚至是致命的OutOfMemoryError(OOM),下面我們就來學(xué)習(xí)一下有哪些解決辦法吧
    2024-01-01
  • java中使用zxing批量生成二維碼立牌

    java中使用zxing批量生成二維碼立牌

    本篇文章主要介紹了java中使用zxing批量生成二維碼立牌,非常具有實用價值,需要的朋友可以參考下。
    2016-12-12
  • 如何將jdk10降版本到j(luò)dk1.8

    如何將jdk10降版本到j(luò)dk1.8

    這篇文章主要介紹了如何將jdk10降版本到j(luò)dk1.8問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java 中數(shù)據(jù)庫連接的JDBC和驅(qū)動程序的深入分析

    java 中數(shù)據(jù)庫連接的JDBC和驅(qū)動程序的深入分析

    這篇文章主要介紹了java 中數(shù)據(jù)庫連接的JDBC和驅(qū)動程序的深入分析的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java中的Excel框架使用詳解

    Java中的Excel框架使用詳解

    這篇文章主要介紹了Java中的Excel框架使用詳解,Java解析、生成Excel比較有名的框架有Apache poi、jxl,但他們都存在一個嚴重的問題就是非常的耗內(nèi)存,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題,需要的朋友可以參考下
    2023-11-11
  • Java鎖競爭導(dǎo)致sql慢日志原因分析

    Java鎖競爭導(dǎo)致sql慢日志原因分析

    這篇文章主要介紹了Java鎖競爭導(dǎo)致sql慢的日志原因分析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11

最新評論

静海县| 宝山区| 嘉荫县| 神农架林区| 盐津县| 沂水县| 大安市| 抚顺县| 鹰潭市| 杭州市| 原阳县| 广西| 丰镇市| 海兴县| 扶余县| 乐都县| 松潘县| 衡山县| 建平县| 盐山县| 灵川县| 香河县| 深泽县| 故城县| 娄底市| 获嘉县| 安塞县| 黎川县| 九龙城区| 邵阳市| 改则县| 尚志市| 甘肃省| 诸城市| 蓬溪县| 文化| 康定县| 甘泉县| 广灵县| 南汇区| 民权县|