03、SpringBoot應用程序主類

應用程序主類說明

??一般在書寫SpringBoot項目的時候通常建議將應用程序主類放到其他類之上的根包中。@EnbaleAutoConfiguration注解通常放置在主類上,它隱式的定義了某些基本搜索包。 例如,如果您正在編寫JPA應用程序,則@EnableAutoConfiguration注解類的包將用于搜索@Entity項。
使用根包(root package)還可以使用@ComponentScan注釋,而不需要指定basePackage屬性(因為默認會掃描主類下所有的包)。 如果您的主類在根包中,也可以使用@SpringBootApplication注釋。
如下圖所示:Application就是應用程序主類


image.png

Application.java文件將聲明main方法以及基本的@Configuration。

package com.yubin.springboot;

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

/**
 * SpringBoot 主應用程序類
 *
 * @Author YUBIN
 * @create 2019-06-09
 */
@ComponentScan // 開啟包掃描
@EnableAutoConfiguration // 開啟自動配置
@Configuration // 申明當前類為配置類
public class Application {

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

到這里也許你會詢問,難道我的每一個應用程序都需要在應用程序主類上加上@EnableAutoConfiguration、@CompontScan、@Configuration這3個注解么,答案是否定的,SpringBoot提供了一個方便的@SpringBootApplication注解作為這個三個的替代方法。

@SpringBootApplication // 相當于 @ComponentScan,@EnableAutoConfiguration,@Configuration這三個注解
public class Application {

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

@SpringBootApplication還提供了別名來定制@EnableAutoConfiguration和@ComponentScan的屬性

配置類

??Spring Boot支持基于Java的配置。雖然可以使用XML配置用SpringApplication.run(),但我們通常建議您的主source是@Configuration類。 通常,定義main方法的類也是作為主要的@Configuration一個很好的選擇。

(1)、導入其他配置類

??在實際項目中可能不會把所有的配置都放在一個配置類(用@Configuration注解的類)中,可能會分開配置。這時可以用@Import注解引用(@Import(value = {***.class}))。@Import注解可用于導入其他配置類。 或者,您可以使用@ComponentScan自動掃描所有Spring組件,包括@Configuration類。

(2)、導入xml配置

??如果在你的項目中需要用到xml配置文件,或者你還不習慣java配置的方式,那么你可以通過在入口啟動類上加上@ImportResource(value = { "路徑" })或者使用@ImportResource(locations= { "路徑" }),一樣的效果,多個XML文件的話你可以用逗號“,”分隔,就這樣輕而易舉的引用XML配置。

(3)、自動配置

??Spring Boot 會根據(jù)您添加的jar依賴關系自動配置您的Spring應用程序。例如,如果HSQLDB在您的類路徑上,并且您沒有手動配置任何數(shù)據(jù)庫連接bean,那么我們將自動配置內存數(shù)據(jù)庫。
您需要通過將@EnableAutoConfiguration或@SpringBootApplication注解添加到您的一個@Configuration類中來選擇自動配置。

備注:你應該只添加一個@EnableAutoConfiguration注解。 我們通常建議您將其添加到主@Configuration類中。
(4)、替代自動配置

??SpringBoot自動配置是非侵入式的,您可以隨時定義自己的配置來替換自動配置。 例如,如果您添加自己的 DataSource bean,則默認的嵌入式數(shù)據(jù)庫支持將會退回。(這是由于在原來的配置類注解了如@ConditianalOnMissingBean;當程序中存在你需要替代的自動配置類時,這個配置類將覆蓋SpringBoot的自動配置)
如果您需要了解當前有哪些自動配置,以及為什么,請使用--debug開關啟動應用程序。 這將啟用debug日志,并將自動配置日志記錄到控制臺。

(5)、禁用指定的自動配置

??如果你發(fā)現(xiàn)正在使用一些不需要的自動配置類,可以使用@EnableAutoConfiguration屬性來禁用它們。

@ComponentScan // 開啟包掃描
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) // 開啟自動配置
@Configuration // 申明當前類為配置類
//@Import(value = {MyProperties.class})
public class Application {

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

如果類不在classpath路徑上,則可以使用注釋的excludeName屬性,并指定全限定名(fully qualified name)。 最后,您還可以通過spring.autoconfigure.exclude屬性控制要排除的自動配置類列表。
備注:注解和使用屬性(property)定義都可以指定要排除的自動配置類。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容