6 采用注解方式開發(fā)bean

Spring從3.0開始使用注解褂痰,到Spring5.0传货,已經(jīng)大量使用嫌蚤,注解的使用可以省卻大量的xml文件

1. HelloWorld的例子改成用注解來實(shí)現(xiàn)

  • HelloWorld類晴裹,采用@Component注解
package com.spring.annotation;

import org.springframework.stereotype.Component;

@Component
public class HelloWorld {
    public String getHello() {
        return "Hello World";
    }
}
  • HelloWorldApp類,采用@ComponentScan注解
package com.spring.annotation;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan
public class HelloApp {

    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(HelloApp.class);
        HelloWorld  helloWorld = context.getBean(HelloWorld.class);
        System.out.println(helloWorld.getHello());
    }
}
  • 運(yùn)行結(jié)果


    image.png

2.Student和Phone的例子改成注解實(shí)現(xiàn)

  • Lombok插件的使用
    1)Settings->plugins拍冠,搜索Lombok,安裝簇抵,重啟IDEA
    2)添加依賴
       <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>
  1. 使用@Data注解庆杜,簡化POJO類,不用再寫那些構(gòu)造方法碟摆、getter/setter,toString()了晃财,專注定義屬性即可。
  • Phone類
package com.spring.annotation;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@Component
public class Phone {
    //通過@Value注解給簡單類型賦值
    @Value("iPhoneX")
    private String brand;

    @Value("6666.66")
    private double price;
}


  • Student類
package com.spring.annotation;

import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@Component
public class Student {
    @Value("Tom")
    private String name;

    @Value("21")
    private int age;

    // 引用類型典蜕,通過@Autowired注入Phone的bean
    @Autowired
    private Phone phone;

}
  • StuentApp類
package com.spring.annotation;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan
public class StudentApp {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(StudentApp.class);
        Student student = context.getBean(Student.class);
        System.out.println(student);
    }
}
  • 運(yùn)行結(jié)果


    運(yùn)行結(jié)果

關(guān)于Lombok的進(jìn)一步學(xué)習(xí)
有哪些注解断盛?
@Data
@Setter
@Getter
@Log4j
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@NonNull
@Cleanup
@ToString
@RequiredArgsConstructor
@Value
@SneakyThrows
@Synchronized

注解詳解
@Data
注解在 類 上;提供類所有屬性的 get 和 set 方法嘉裤,此外還提供了equals郑临、canEqual、hashCode屑宠、toString 方法厢洞。
@Setter
注解在 屬性 上;為單個(gè)屬性提供 set 方法; 注解在 類 上典奉,為該類所有的屬性提供 set 方法躺翻, 都提供默認(rèn)構(gòu)造方法。
@Getter
注解在 屬性 上卫玖;為單個(gè)屬性提供 get 方法; 注解在 類 上公你,為該類所有的屬性提供 get 方法,都提供默認(rèn)構(gòu)造方法假瞬。
@Log4j
注解在 類 上陕靠;為類提供一個(gè) 屬性名為 log 的 log4j 日志對象,提供默認(rèn)構(gòu)造方法脱茉。
@AllArgsConstructor
注解在 類 上剪芥;為類提供一個(gè)全參的構(gòu)造方法,加了這個(gè)注解后琴许,類中不提供默認(rèn)構(gòu)造方法了税肪。
@NoArgsConstructor
注解在 類 上;為類提供一個(gè)無參的構(gòu)造方法。
@EqualsAndHashCode
注解在 類 上, 可以生成 equals益兄、canEqual锻梳、hashCode 方法。
@NonNull
注解在 屬性 上净捅,會自動(dòng)產(chǎn)生一個(gè)關(guān)于此參數(shù)的非空檢查疑枯,如果參數(shù)為空,則拋出一個(gè)空指針異常灸叼,也會有一個(gè)默認(rèn)的無參構(gòu)造方法神汹。
@Cleanup
這個(gè)注解用在 變量 前面,可以保證此變量代表的資源會被自動(dòng)關(guān)閉古今,默認(rèn)是調(diào)用資源的 close() 方法屁魏,如果該資源有其它關(guān)閉方法,可使用 @Cleanup(“methodName”) 來指定要調(diào)用的方法捉腥,也會生成默認(rèn)的構(gòu)造方法
@ToString
這個(gè)注解用在 類 上氓拼,可以生成所有參數(shù)的 toString 方法,還會生成默認(rèn)的構(gòu)造方法抵碟。
@RequiredArgsConstructor
這個(gè)注解用在 類 上桃漾,使用類中所有帶有 @NonNull 注解的或者帶有 final 修飾的成員變量生成對應(yīng)的構(gòu)造方法。
@Value
這個(gè)注解用在 類 上拟逮,會生成含所有參數(shù)的構(gòu)造方法撬统,get 方法,此外還提供了equals敦迄、hashCode恋追、toString 方法。
@SneakyThrows
這個(gè)注解用在 方法 上罚屋,可以將方法中的代碼用 try-catch 語句包裹起來苦囱,捕獲異常并在 catch 中用 Lombok.sneakyThrow(e) 把異常拋出,可以使用 @SneakyThrows(Exception.class) 的形式指定拋出哪種異常脾猛,也會生成默認(rèn)的構(gòu)造方法撕彤。
@Synchronized
這個(gè)注解用在 類方法 或者 實(shí)例方法 上,效果和 synchronized 關(guān)鍵字相同猛拴,區(qū)別在于鎖對象不同羹铅,對于類方法和實(shí)例方法,synchronized 關(guān)鍵字的鎖對象分別是類的 class 對象和 this 對象愉昆,而 @Synchronized 的鎖對象分別是 私有靜態(tài) final 對象 lock 和 私有 final 對象 lock职员,當(dāng)然,也可以自己指定鎖對象撼唾,此外也提供默認(rèn)的構(gòu)造方法廉邑。

總結(jié)
以上注解可根據(jù)需要一起搭配使用!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倒谷,一起剝皮案震驚了整個(gè)濱河市蛛蒙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渤愁,老刑警劉巖牵祟,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抖格,居然都是意外死亡诺苹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門雹拄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來收奔,“玉大人,你說我怎么就攤上這事滓玖∑汉澹” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵势篡,是天一觀的道長翩肌。 經(jīng)常有香客問我,道長禁悠,這世上最難降的妖魔是什么念祭? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮碍侦,結(jié)果婚禮上粱坤,老公的妹妹穿的比我還像新娘。我一直安慰自己祝钢,他們只是感情好比规,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拦英,像睡著了一般蜒什。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疤估,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天灾常,我揣著相機(jī)與錄音,去河邊找鬼铃拇。 笑死钞瀑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的慷荔。 我是一名探鬼主播雕什,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贷岸?” 一聲冷哼從身側(cè)響起壹士,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偿警,沒想到半個(gè)月后躏救,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡螟蒸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年盒使,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片七嫌。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡少办,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诵原,到底是詐尸還是另有隱情凡泣,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布皮假,位于F島的核電站鞋拟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惹资。R本人自食惡果不足惜贺纲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望褪测。 院中可真熱鬧猴誊,春花似錦、人聲如沸侮措。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽分扎。三九已至澄成,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畏吓,已是汗流浹背墨状。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留菲饼,地道東北人肾砂。 一個(gè)月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像宏悦,于是被迫代替她去往敵國和親镐确。 傳聞我的和親對象是個(gè)殘疾皇子包吝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349

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

  • Contents 介紹 安裝idea 安裝lombokeclipse安裝lombok Lombok 注解@Gett...
    雨中星辰0閱讀 3,348評論 0 2
  • 在面向?qū)ο缶幊讨斜夭豢缮傩枰诖a中定義對象模型,而在基于Java的業(yè)務(wù)平臺開發(fā)實(shí)踐中尤其如此源葫。相信大家在平時(shí)開發(fā)...
    消失er閱讀 12,712評論 15 150
  • 前言 Lombok 是一種 Java? 實(shí)用工具漏策,可用來幫助開發(fā)人員消除 Java 的冗長,尤其是對于簡單的 Ja...
    jackcooper閱讀 5,630評論 1 112
  • 這個(gè)方程不是數(shù)學(xué)題臼氨,也不是物理化學(xué)定律。這是美國前中央情報(bào)局副局長提出的:國力=(資源力+經(jīng)濟(jì)實(shí)力+軍事實(shí)...
    z次方閱讀 2,318評論 0 0
  • JS中最初有:Undefined芭届,Null储矩,Boolean,Number褂乍,String和Object六種數(shù)據(jù)類型持隧,...
    張柳哥閱讀 218評論 0 0