Lombok怎么在SpringBoot 2.x中使用?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有博愛免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。lombok
是一個(gè)編譯級別的插件,它可以在項(xiàng)目編譯的時(shí)候生成一些代碼。比如日常開發(fā)過程中需要生產(chǎn)大量的JavaBean
文件,每個(gè)JavaBean
都需要提供大量的get
和set
方法,如果字段較多且發(fā)生變動的話修改起來相對繁瑣,相應(yīng)的lombok
可以通過注解(@getter,@setter)
為我們省去手動創(chuàng)建getter
和setter
方法的麻煩,它能夠在我們編譯源碼的時(shí)候自動幫我們生成getter
和setter
方法。
即它最終能夠達(dá)到的效果是:在源碼中沒有getter
和setter
方法,但是在編譯生成的字節(jié)碼文件中有getter
和setter
方法。
安裝 lombok 插件
添加注解支持
添加依賴
buildscript { ext { springBootVersion = '2.0.2.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' group = 'com.yanjun' version = '0.0.1-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile('org.springframework.boot:spring-boot-starter', 'org.springframework.boot:spring-boot-starter-web', ) //添加lombok依賴 compile 'org.projectlombok:lombok:1.18.0' }
常用注解
@Data 注解在類上;提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法
@Setter :注解在屬性上;為屬性提供 setting 方法
@Setter :注解在屬性上;為屬性提供 getting 方法
@Log4j :注解在類上;為類提供一個(gè) 屬性名為log 的 log4j 日志對象
@NoArgsConstructor :注解在類上;為類提供一個(gè)無參的構(gòu)造方法
@AllArgsConstructor :注解在類上;為類提供一個(gè)全參的構(gòu)造方法
@Cleanup : 可以關(guān)閉流
@Builder : 被注解的類加個(gè)構(gòu)造者模式
@Synchronized : 加個(gè)同步鎖
@SneakyThrows : 等同于try/catch 捕獲異常
@NonNull : 如果給參數(shù)加個(gè)這個(gè)注解 參數(shù)為null會拋出空指針異常
@Value : 注解和@Data類似,區(qū)別在于它會把所有成員變量默認(rèn)定義為private final修飾,并且不會生成set方法。
@NonNull 判空處理
package com.yanjun.mybatis.bean; import lombok.Data; import lombok.NoArgsConstructor; import lombok.NonNull; @Data @NoArgsConstructor public class User { public Integer age; @NonNull public String name; }
相當(dāng)于
package com.yanjun.mybatis.bean; import lombok.NonNull; public class User { public Integer age; @NonNull public String name; public Integer getAge() { return this.age; } @NonNull public String getName() { return this.name; } public void setAge(Integer age) { this.age = age; } public void setName(@NonNull String name) { if (name == null) { throw new NullPointerException("name is marked @NonNull but is null"); } else { this.name = name; } } }
測試
User user = new User(); user.setName(null);
效果
Exception in thread "main" java.lang.NullPointerException: name is marked @NonNull but is null
at com.yanjun.mybatis.bean.User.setName(User.java:7)
at com.yanjun.mybatis.LombokApplication.main(LombokApplication.java:15)
@Data 提供 get、set 方法
package com.yanjun.mybatis.bean; import lombok.Data; @Data //自動生成 get、set 方法 public class User { Integer id; String name; Integer age; public static void main(String[] args) { //測試方法 User user = new User(); user.setName("zhaoyanjun"); user.setAge(20); user.setId(1); } }
@Slf4j 日志打印
package com.yanjun.mybatis.bean; import lombok.Data; import lombok.extern.slf4j.Slf4j; @Data //自動生成 get、set 方法 @Slf4j //日志打印 public class User { Integer id; String name; Integer age; public static void main(String[] args) { User user = new User(); user.setName("zhaoyanjun"); user.setAge(20); user.setId(1); log.info("日志" + user.toString()); } }
@AllArgsConstructor 全參數(shù)構(gòu)造函數(shù)
package com.yanjun.mybatis.bean; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; @Data //自動生成 get、set 方法 @AllArgsConstructor //自動生成全參數(shù)構(gòu)造函數(shù) @Slf4j //日志打印 public class User { Integer id; String name; Integer age; public static void main(String[] args) { User user = new User(1, "zhaoyanjun", 20); log.info("日志" + user.toString()); } }
@ToString 自動生成toString方法
package com.yanjun.mybatis.bean; import lombok.AllArgsConstructor; import lombok.Data; import lombok.ToString; import lombok.extern.slf4j.Slf4j; @Data //自動生成 get、set 方法 @AllArgsConstructor //自動生成全參數(shù)構(gòu)造函數(shù) @Slf4j //日志打印 @ToString(of = {"id","age"}) //tostring() 方法里面只打印 id ,name 字段 public class User { Integer id; String name; Integer age; public static void main(String[] args) { User user = new User(1, "zhaoyanjun", 20); log.info("日志" + user.toString()); } }
toString() 方法排除字段
//排除字段 @ToString(exclude = {"name"}) //tostring() 方法中,name 字段不參與打印
@Value 用于注解final類
@Value
注解和@Data
類似,區(qū)別在于它會把所有成員變量默認(rèn)定義為 private final
修飾,并且不會生成set
方法。
package com.yanjun.mybatis.bean; import lombok.Value; @Value public class User { Integer id = 1; String name = "zhaoyanjun"; Integer age = 3 ; }
編譯后的代碼
public final class User { private final Integer id = 1; private final String name = "zhaoyanjun"; private final Integer age = 3; public User() { } public Integer getId() { return this.id; } public String getName() { this.getClass(); return "zhaoyanjun"; } public Integer getAge() { return this.age; } //省略部分代碼 ...... }
@Builder : 被注解的類加個(gè)構(gòu)造者模式
import lombok.Builder; @Builder public class User { public Integer id; public String name; public Integer age; }
相當(dāng)于以下代碼
package com.yanjun.mybatis.bean; public class User { public Integer id; public String name; public Integer age; User(Integer id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } public static User.UserBuilder builder() { return new User.UserBuilder(); } public static class UserBuilder { private Integer id; private String name; private Integer age; UserBuilder() { } public User.UserBuilder id(Integer id) { this.id = id; return this; } public User.UserBuilder name(String name) { this.name = name; return this; } public User.UserBuilder age(Integer age) { this.age = age; return this; } public User build() { return new User(this.id, this.name, this.age); } public String toString() { return "User.UserBuilder(id=" + this.id + ", name=" + this.name + ", age=" + this.age + ")"; } } }
使用
UserBuilder userBuilder = User.builder(); User user = userBuilder .age(10) .id(1) .name("yanjun") .build(); System.out.println(": " + userBuilder.toString());
@Synchronized : 加個(gè)同步鎖
package com.yanjun.mybatis.bean; import lombok.Synchronized; public class User { public Integer age; public String name; //普通方法,相當(dāng)于對象鎖 @Synchronized int run1() { return 1; } //靜態(tài)方法,相當(dāng)于類鎖 @Synchronized static int run2() { return 2; } }
代碼的效果相當(dāng)于
public class User { private final Object $lock = new Object[0]; private static final Object $LOCK = new Object[0]; public Integer age; public String name; public User() { } int run1() { Object var1 = this.$lock; synchronized(this.$lock) { return 1; } } static int run2() { Object var0 = $LOCK; synchronized($LOCK) { return 2; } } }
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。