采用注解方式開(kāi)發(fā)bean可以省去get、set構(gòu)造方法同時(shí)不需要在xml去添加bean的屬性
1.Component注解,這個(gè)注解有兩種用法,一種是帶有name屬性值,即Component("xxxx"),一種是直接寫(xiě)這個(gè)注解@Component,這兩個(gè)的區(qū)別是:
第一種的注解在getbean的時(shí)候取的bianID是@component("xxxx")這個(gè)name屬性的值,否則報(bào)錯(cuò),第二種使用Component注解,并且不指定其屬性name的值,則bena的ID默認(rèn)為類(lèi)的名稱(chēng)的第一個(gè)字母小寫(xiě)的字符串
將之前的HelloWorld改用注解方式
Hello類(lèi)用@component注解
![ITWD]9LQ]R12XVZ2S`9LI6V.png](https://upload-images.jianshu.io/upload_images/16513823-e7c5abf5c204f588.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)HelloApp用@componentScan注解
![0}%YO]ZC8Y~PHDOHR7Y_)WQ.png](https://upload-images.jianshu.io/upload_images/16513823-fc2492f53a80308d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 運(yùn)行結(jié)果
![BJRFDPULU~%JQ`@F8$YJHC.png
2.Student和Phone類(lèi)改成@component注解
- Lombok插件的使用
1.Settings->plugins,搜索Lombok,安裝,重啟IDEA
2.添加依賴
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
3.使用@Data注解,不用再寫(xiě)那些構(gòu)造方法、getter/setter,toString()了 使用@Value("")給簡(jiǎn)單類(lèi)型賦值.
-
Student類(lèi)
IT)I)39FJVG}K}30J$361EG.png -
Phone
p.png -
StudentApp
ap.png - 運(yùn)行結(jié)果
![)J0A_TN~PLNJ@0]AQW}0AYW.png](https://upload-images.jianshu.io/upload_images/16513823-0c73795474878a4c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) - 關(guān)于Lombok的進(jìn)一步學(xué)習(xí)(摘抄老師的)
有哪些注解?
@Data
@Setter
@Getter
@Log4j
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@NonNull
@Cleanup
@ToString
@RequiredArgsConstructor
@Value
@SneakyThrows
@Synchronized
注解詳解
@Data
注解在 類(lèi) 上;提供類(lèi)所有屬性的 get 和 set 方法,此外還提供了equals、canEqual、hashCode、toString 方法。
@Setter
注解在 屬性 上;為單個(gè)屬性提供 set 方法; 注解在 類(lèi) 上,為該類(lèi)所有的屬性提供 set 方法, 都提供默認(rèn)構(gòu)造方法。
@Getter
注解在 屬性 上;為單個(gè)屬性提供 get 方法; 注解在 類(lèi) 上,為該類(lèi)所有的屬性提供 get 方法,都提供默認(rèn)構(gòu)造方法。
@Log4j
注解在 類(lèi) 上;為類(lèi)提供一個(gè) 屬性名為 log 的 log4j 日志對(duì)象,提供默認(rèn)構(gòu)造方法。
@AllArgsConstructor
注解在 類(lèi) 上;為類(lèi)提供一個(gè)全參的構(gòu)造方法,加了這個(gè)注解后,類(lèi)中不提供默認(rèn)構(gòu)造方法了。
@NoArgsConstructor
注解在 類(lèi) 上;為類(lèi)提供一個(gè)無(wú)參的構(gòu)造方法。
@EqualsAndHashCode
注解在 類(lèi) 上, 可以生成 equals、canEqual、hashCode 方法。
@NonNull
注解在 屬性 上,會(huì)自動(dòng)產(chǎn)生一個(gè)關(guān)于此參數(shù)的非空檢查,如果參數(shù)為空,則拋出一個(gè)空指針異常,也會(huì)有一個(gè)默認(rèn)的無(wú)參構(gòu)造方法。
@Cleanup
這個(gè)注解用在 變量 前面,可以保證此變量代表的資源會(huì)被自動(dòng)關(guān)閉,默認(rèn)是調(diào)用資源的 close() 方法,如果該資源有其它關(guān)閉方法,可使用 @Cleanup(“methodName”) 來(lái)指定要調(diào)用的方法,也會(huì)生成默認(rèn)的構(gòu)造方法
@ToString
這個(gè)注解用在 類(lèi) 上,可以生成所有參數(shù)的 toString 方法,還會(huì)生成默認(rèn)的構(gòu)造方法。
@RequiredArgsConstructor
這個(gè)注解用在 類(lèi) 上,使用類(lèi)中所有帶有 @NonNull 注解的或者帶有 final 修飾的成員變量生成對(duì)應(yīng)的構(gòu)造方法。
@Value
這個(gè)注解用在 類(lèi) 上,會(huì)生成含所有參數(shù)的構(gòu)造方法,get 方法,此外還提供了equals、hashCode、toString 方法。
@SneakyThrows
這個(gè)注解用在 方法 上,可以將方法中的代碼用 try-catch 語(yǔ)句包裹起來(lái),捕獲異常并在 catch 中用 Lombok.sneakyThrow(e) 把異常拋出,可以使用 @SneakyThrows(Exception.class) 的形式指定拋出哪種異常,也會(huì)生成默認(rèn)的構(gòu)造方法。
@Synchronized
這個(gè)注解用在 類(lèi)方法 或者 實(shí)例方法 上,效果和 synchronized 關(guān)鍵字相同,區(qū)別在于鎖對(duì)象不同,對(duì)于類(lèi)方法和實(shí)例方法,synchronized 關(guān)鍵字的鎖對(duì)象分別是類(lèi)的 class 對(duì)象和 this 對(duì)象,而 @Synchronized 的鎖對(duì)象分別是 私有靜態(tài) final 對(duì)象 lock 和 私有 final 對(duì)象 lock,當(dāng)然,也可以自己指定鎖對(duì)象,此外也提供默認(rèn)的構(gòu)造方法。


