springboot注解

@RestController和@RequestMapping注解

我們的Example類上使用的第一個注解是 @RestController 敛苇。這被稱為一個構(gòu)造型(stereotype)注解绵载。它為閱讀代碼的人們提供建議笋庄。對于Spring,該類扮演了一個特殊角色虏劲。在本示例中,我們的類是一個web @Controller ,所以當(dāng)處理進來的web請求時寨典,Spring會詢問它。@RequestMapping 注解提供路由信息房匆。它告訴Spring任何來自"/"路徑的HTTP請求都應(yīng)該被映射到 home 方法耸成。 @RestController 注解告訴Spring以字符串的形式渲染結(jié)果,并直接返回給調(diào)用者浴鸿。

注: @RestController 和 @RequestMapping 注解是Spring MVC注解(它們不是Spring Boot的特定部分)


@EnableAutoConfiguration注解

第二個類級別的注解是 @EnableAutoConfiguration 井氢。這個注解告訴Spring Boot根據(jù)添加的jar依賴猜測你想如何配置Spring。由于 spring-boot-starter-web 添加了Tomcat和Spring MVC岳链,所以auto-configuration將假定你正在開發(fā)一個web應(yīng)用并相應(yīng)地對Spring進行設(shè)置花竞。Starter POMs和Auto-Configuration:設(shè)計auto-configuration的目的是更好的使用"Starter POMs",但這兩個概念沒有直接的聯(lián)系掸哑。你可以自由地挑選starter POMs以外的jar依賴约急,并且Spring Boot將仍舊盡最大努力去自動配置你的應(yīng)用寇仓。

你可以通過將 @EnableAutoConfiguration 或 @SpringBootApplication 注解添加到一個 @Configuration 類上來選擇自動配置。
注:你只需要添加一個 @EnableAutoConfiguration 注解烤宙。我們建議你將它添加到主 @Configuration 類上。

如果發(fā)現(xiàn)應(yīng)用了你不想要的特定自動配置類俭嘁,你可以使用 @EnableAutoConfiguration 注解的排除屬性來禁用它們躺枕。

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; white-space: pre-wrap; word-wrap: break-word;">import org.springframework.boot.autoconfigure.; import org.springframework.boot.autoconfigure.jdbc.; import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class MyConfiguration {
}</pre>

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")


@Configuration

Spring Boot提倡基于Java的配置。盡管你可以使用一個XML源來調(diào)用 SpringApplication.run() 供填,我們通常建議你使用 @Configuration 類作為主要源拐云。一般定義 main 方法的類也是主要 @Configuration 的一個很好候選。你不需要將所有的 @Configuration 放進一個單獨的類近她。 @Import 注解可以用來導(dǎo)入其他配置類叉瘩。另外,你也可以使用 @ComponentScan 注解自動收集所有的Spring組件粘捎,包括 @Configuration 類薇缅。

如果你絕對需要使用基于XML的配置,我們建議你仍舊從一個 @Configuration 類開始攒磨。你可以使用附加的 @ImportResource 注解加載XML配置文件泳桦。

@Configuration注解該類,等價 與XML中配置beans娩缰;用@Bean標(biāo)注方法等價于XML中配置bean


@ComponentScan

你可以自由地使用任何標(biāo)準(zhǔn)的Spring框架技術(shù)去定義beans和它們注入的依賴灸撰。簡單起見,我們經(jīng)常使用 @ComponentScan 注解搜索beans拼坎,并結(jié)合 @Autowired 構(gòu)造器注入浮毯。
如果使用上面建議的結(jié)構(gòu)組織代碼(將應(yīng)用類放到根包下),你可以添加 @ComponentScan 注解而不需要任何參數(shù)泰鸡。你的所有應(yīng)用程序組件( @Component , @Service , @Repository , @Controller 等)將被自動注冊為Spring Beans债蓝。


@SpringBootApplication

很多Spring Boot開發(fā)者總是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他們的main類鸟顺。由于這些注解被如此頻繁地一塊使用(特別是你遵循以上最佳實踐時)惦蚊,Spring Boot提供一個方便的 @SpringBootApplication 選擇。
該 @SpringBootApplication 注解等價于以默認(rèn)屬性使用 @Configuration 讯嫂, @EnableAutoConfiguration 和 @ComponentScan 蹦锋。

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; white-space: pre-wrap; word-wrap: break-word;">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);
}
}</pre>

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")


@ConfigurationProperties

屬性注入

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; white-space: pre-wrap; word-wrap: break-word;">@Component
@ConfigurationProperties(prefix="connection") public class ConnectionSettings { private String username; private InetAddress remoteAddress; // ... getters and setters
}</pre>

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

為了使用@ConfigurationProperties beans,你可以使用與其他任何bean相同的方式注入它們

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; white-space: pre-wrap; word-wrap: break-word;">@Service public class MyService {
@Autowired private ConnectionSettings connection; //...
@PostConstruct public void openConnection() {
Server server = new Server(); this.connection.configure(server);
}
}</pre>

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

正如使用@ConfigurationProperties注解一個類欧芽,你也可以在@Bean方法上使用它莉掂。當(dāng)你需要綁定屬性到不受你控制的第三方組件時,這種方式非常有用千扔。

為了從Environment屬性配置一個bean憎妙,將@ConfigurationProperties添加到它的bean注冊過程:

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; white-space: pre-wrap; word-wrap: break-word;">@ConfigurationProperties(prefix = "foo")
@Bean public FooComponent fooComponent() {
...
}</pre>

和上面ConnectionSettings的示例方式相同库正,任何以foo為前綴的屬性定義都會被映射到FooComponent上。

Spring Boot將嘗試校驗外部的配置厘唾,默認(rèn)使用JSR-303(如果在classpath路徑中)褥符。你可以輕松的為你的@ConfigurationProperties類添加JSR-303 javax.validation約束注解:

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; white-space: pre-wrap; word-wrap: break-word;">@Component
@ConfigurationProperties(prefix="connection") public class ConnectionSettings {
@NotNull private InetAddress remoteAddress; // ... getters and setters
}</pre>

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")


@EnableConfigurationProperties

當(dāng)@EnableConfigurationProperties注解應(yīng)用到你的@Configuration時,任何被@ConfigurationProperties注解的beans將自動被Environment屬性配置

你可以通過在@EnableConfigurationProperties注解中直接簡單的列出屬性類來快捷的注冊@ConfigurationProperties bean的定義抚垃。

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; white-space: pre-wrap; word-wrap: break-word;">@Configuration
@EnableConfigurationProperties(ConnectionSettings.class) public class MyConfiguration {
}</pre>


@Component和@Bean

@Component被用在要被自動掃描和裝配的類上喷楣。@Component類中使用方法或字段時不會使用CGLIB增強(及不使用代理類:調(diào)用任何方法,使用任何變量鹤树,拿到的是原始對象)Spring 注解@Component等效于@Service,@Controller,@Repository
@Bean主要被用在方法上铣焊,來顯式聲明要用生成的類;用@Configuration注解該類,等價 與XML中配置beans罕伯;用@Bean標(biāo)注方法等價于XML中配置bean曲伊。

現(xiàn)在項目上,本工程中的類追他,一般都使用@Component來生成bean坟募。在把通過web service取得的類,生成Bean時邑狸,使用@Bean和getter方法來生成bean


@Profiles

Spring Profiles提供了一種隔離應(yīng)用程序配置的方式婿屹,并讓這些配置只能在特定的環(huán)境下生效。任何@Component或@Configuration都能被@Profile標(biāo)記推溃,從而限制加載它的時機昂利。

<pre style="font-family: Courier New; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; white-space: pre-wrap; word-wrap: break-word;">@Configuration
@Profile("production") public class ProductionConfiguration { // ...
}</pre>

以正常的Spring方式,你可以使用一個spring.profiles.active的Environment屬性來指定哪個配置生效铁坎。你可以使用平常的任何方式來指定該屬性蜂奸,例如,可以將它包含到你的application.properties中:

spring.profiles.active=dev,hsqldb

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硬萍,一起剝皮案震驚了整個濱河市扩所,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朴乖,老刑警劉巖祖屏,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異买羞,居然都是意外死亡袁勺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門畜普,熙熙樓的掌柜王于貴愁眉苦臉地迎上來期丰,“玉大人,你說我怎么就攤上這事《鄣矗” “怎么了街立?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長埠通。 經(jīng)常有香客問我赎离,道長,這世上最難降的妖魔是什么端辱? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任蟹瘾,我火速辦了婚禮,結(jié)果婚禮上掠手,老公的妹妹穿的比我還像新娘。我一直安慰自己狸捕,他們只是感情好喷鸽,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灸拍,像睡著了一般做祝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸡岗,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天混槐,我揣著相機與錄音,去河邊找鬼轩性。 笑死声登,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的揣苏。 我是一名探鬼主播悯嗓,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼卸察!你這毒婦竟也來了脯厨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤坑质,失蹤者是張志新(化名)和其女友劉穎合武,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涡扼,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡稼跳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吃沪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岂贩。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萎津,到底是詐尸還是另有隱情卸伞,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布锉屈,位于F島的核電站荤傲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏颈渊。R本人自食惡果不足惜遂黍,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俊嗽。 院中可真熱鬧雾家,春花似錦、人聲如沸绍豁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竹揍。三九已至敬飒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芬位,已是汗流浹背无拗。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昧碉,地道東北人英染。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像被饿,于是被迫代替她去往敵國和親税迷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

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

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理锹漱,服務(wù)發(fā)現(xiàn)箭养,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 1哥牍、@RestController和@RequestMapping注解 我們的Example類上使用的第一個注解是...
    OzanShareing閱讀 252評論 0 2
  • 入門 介紹 Spring Boot Spring Boot 使您可以輕松地創(chuàng)建獨立的毕泌、生產(chǎn)級的基于 Spring ...
    Hsinwong閱讀 16,852評論 2 89
  • 一撼泛、子君為什么總是懷疑陳俊生出軌 怎樣做一個人人厭惡的女人?子君在電視劇的開頭做得很好:...
    李知歐閱讀 292評論 0 0