springboot-構(gòu)建

14. Structuring your code

14.1 Using the “default” package

官方建議使用反向域名定義包結(jié)構(gòu)敌呈,比如com.example.project
如果一個(gè)類沒有被定義在一個(gè)包中伦连,它會(huì)被放在一個(gè)default package中,當(dāng)這個(gè)類應(yīng)用@ComponentScan @EntityScan @SpringBootApplication這幾個(gè)注解的時(shí)候會(huì)對(duì)全部依賴jar包進(jìn)行掃描荐吉,應(yīng)該避免這種情況

14.2 Locating the main application class

主啟動(dòng)類一般在所有類的外面, 位于一個(gè)root package中
注解@EnableAutoConfiguration經(jīng)常被用在main application class,并且默認(rèn)指定一個(gè)特定搜索范圍(search package, 但是具體沒有說清楚口渔,看讀到后面有沒說吧)
文檔中舉了個(gè)栗子样屠,如果你是在寫一個(gè)JPA的程序,@EnableAutoConfiguration會(huì)被指定掃描帶@Bean注解的類
如果啟動(dòng)類在root package中缺脉,那@ComponentScan就可以不用定義具體的basePackage屬性痪欲,也可以直接使用@SpringBootApplication
經(jīng)典布局(直接復(fù)制官網(wǎng)):

com
 +- example
     +- myproject
         +- Application.java
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

Application.java是主啟動(dòng)類,定義了啟動(dòng)main方法

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

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

}

15. Configuration classes

(汗顏攻礼,沒有認(rèn)真讀過spring api业踢,不知道@Configuration的具體用法,
沒用過, 將就著看這段吧, 讀完springboot后去補(bǔ)spring)

springboot傾向于基于java進(jìn)行配置,所以盡管可以通過XML文件配置啟動(dòng)main方法SpringApplication.run(), 官方還是建議使用@Configuration注解
Usually the class that defines the main method is also a good candidate as the primary @Configuration.
這段不是很明白, 翻譯過來是通常定義main方法的類也是主@Configuration的很好的候選

15.1 Importing additional configuration classes

You don’t need to put all your @Configuration into a single class. The @Import annotation can be used to import additional configuration classes. Alternatively, you can use @ComponentScan to automatically pick up all Spring components, including @Configuration classes.
能看得懂, 但不理解, 硬翻不需要將所有的@Configuration放到一個(gè)class中, 可以使用@Import注解導(dǎo)入額外的配置類. 也可以使用@ComponentScan自動(dòng)掃描spring組件, 包括@Configuration類
自己通過代碼實(shí)現(xiàn)來理解

15.2 Importing XML configuration

即便必須使用xml源, 官方仍然建議使用@Configuration類, 然后使用一個(gè)注解@ImportResource來加載xml配置

16. Auto-configuration

springboot的auto-configuration會(huì)嘗試根據(jù)你添加的jar包配置spring.
For example, If HSQLDB is on your classpath, and you have not manually configured any database connection beans, then we will auto-configure an in-memory database.
比如hsqldb在classpath路徑下, 如果沒有手動(dòng)配置數(shù)據(jù)庫(kù)連接, springboot會(huì)自動(dòng)配置一個(gè)內(nèi)嵌的數(shù)據(jù)庫(kù).
你需要添加注解@EnableAutoConfiguration或者@SpringBootApplication到其中一個(gè)@Configuration類上來實(shí)現(xiàn)自動(dòng)配置.
其實(shí)只需要添加一個(gè)@EnableAutoConfiguration注解到主要的那個(gè)@Configuration類上

16.1 Gradually replacing auto-configuration

auto-configuration并沒有太大的侵入性, 你可以在任何時(shí)候手動(dòng)設(shè)置替代特定的自動(dòng)配置.
如果想知道現(xiàn)在哪些auto-configuration正在被使用以及為什么, 可以使用--debug, 這回生成自動(dòng)配置報(bào)告并輸出到控制臺(tái)(This will enable debug logs for a selection of core loggers and log an auto-configuration report to the console)

16.2 Disabling specific auto-configuration

如果有自己不想出現(xiàn)的某個(gè)自動(dòng)配置, 可以使用@EnableAutoConfiguration中的exclude屬性將禁止它, 例如下

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;

@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}

如果類沒有在classpath路徑下, 可以使用excludeName屬性來指定有效的名字, 同樣可以使用property屬性spring.autoconfigure.exclude來進(jìn)行指定. 注解跟配置文件兩種方式可同時(shí)定義使用

17. Spring Beans and dependency injection

你可以自由使用任何標(biāo)準(zhǔn)的spring framework來定義beans以及注入依賴, 比如使用@ComponentScan來掃描beans, 使用@Autowired構(gòu)造器來注入效果就不錯(cuò).
如果代碼構(gòu)造如之前所推薦的(在根目錄加載Application類), 你可以毫無爭(zhēng)議的使用@ComponentScan, 所有帶有(@Component @Service @Repository @Controller etc.)注解的類都可以自動(dòng)注冊(cè)為spring beans.
如下是一個(gè)使用構(gòu)造器注入的@Servicebean

package com.example.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DatabaseAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    @Autowired
    public DatabaseAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

如果bean有一個(gè)構(gòu)造器, 可以省略@Autowired

@Service
public class DatabaseAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    public DatabaseAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

這里用構(gòu)造器注入, 允許RiskAssessor被標(biāo)記成final, 后續(xù)RiskAssessor不可改變

18. Using the @SpringBootApplication annotation

因?yàn)?code>@ComponentScan @EnableAutoConfiguration @Configuration太經(jīng)常組合使用了, 所以有一個(gè)@SpringBootApplication用來替代它們?nèi)齻€(gè), 與這三個(gè)注解的默認(rèn)屬性配置相同, 例如下

package com.example.myproject;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {

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

}

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末礁扮,一起剝皮案震驚了整個(gè)濱河市陨亡,隨后出現(xiàn)的幾起案子傍衡,更是在濱河造成了極大的恐慌,老刑警劉巖负蠕,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛙埂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡遮糖,警方通過查閱死者的電腦和手機(jī)绣的,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欲账,“玉大人屡江,你說我怎么就攤上這事∪唬” “怎么了惩嘉?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)踢故。 經(jīng)常有香客問我文黎,道長(zhǎng),這世上最難降的妖魔是什么殿较? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任耸峭,我火速辦了婚禮,結(jié)果婚禮上淋纲,老公的妹妹穿的比我還像新娘劳闹。我一直安慰自己,他們只是感情好洽瞬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布本涕。 她就那樣靜靜地躺著,像睡著了一般伙窃。 火紅的嫁衣襯著肌膚如雪偏友。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天对供,我揣著相機(jī)與錄音位他,去河邊找鬼。 笑死产场,一個(gè)胖子當(dāng)著我的面吹牛鹅髓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播京景,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼窿冯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了确徙?” 一聲冷哼從身側(cè)響起醒串,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤执桌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后芜赌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仰挣,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年缠沈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膘壶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洲愤,死狀恐怖颓芭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柬赐,我是刑警寧澤亡问,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站肛宋,受9級(jí)特大地震影響州藕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悼吱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一堂飞、第九天 我趴在偏房一處隱蔽的房頂上張望圃泡。 院中可真熱鬧,春花似錦蛙讥、人聲如沸薪丁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)严嗜。三九已至粱檀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間漫玄,已是汗流浹背茄蚯。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睦优,地道東北人渗常。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像汗盘,于是被迫代替她去往敵國(guó)和親皱碘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容