การแนะนำ
lombok เป็นปลั๊กอินระดับรวบรวมที่สามารถสร้างรหัสบางอย่างเมื่อรวบรวมโครงการ ตัวอย่างเช่นในระหว่างการพัฒนาทุกวันจำเป็นต้องมีการผลิตไฟล์ JavaBean จำนวนมาก JavaBean แต่ละตัวจำเป็นต้องจัดหาวิธีการ get และ set จำนวนมาก หากมีหลายสาขาและการเปลี่ยนแปลงมันค่อนข้างยุ่งยากในการแก้ไข lombok ที่เกี่ยวข้องสามารถช่วยเราให้เรามีปัญหาในการสร้าง getter และวิธี setter ด้วยตนเองผ่านคำอธิบายประกอบ (@getter,@setter) มันสามารถสร้าง getter และ setter โดยอัตโนมัติเมื่อเรารวบรวมซอร์สโค้ด
นั่นคือเอฟเฟกต์ที่สามารถทำได้คือ: ไม่มีวิธีการ getter และ setter ในซอร์สโค้ด แต่มีวิธีการ getter และ setter ในไฟล์ bytecode ที่รวบรวม
นอกจากนี้ในระหว่างขั้นตอนการพัฒนาโครงการคุณสมบัติของ class มีการเปลี่ยนแปลงอยู่ตลอดเวลา อาจมีการเพิ่มฟิลด์ในวันนี้และอาจมีการลบฟิลด์ในวันพรุ่งนี้ การเปลี่ยนแปลงแต่ละครั้งจำเป็นต้องมีการแก้ไขรหัสเทมเพลตที่เกี่ยวข้อง นอกจากนี้บาง class มีหลายสาขาที่พวกเขาไม่สามารถจบได้ตั้งแต่แรกเห็น หากคุณเพิ่มรหัสเทมเพลตมันก็ยากที่จะเห็นได้อย่างรวดเร็ว ยิ่งไปกว่านั้นเพราะมีฟิลด์มากเกินไปฉันต้องการใช้ builder เพื่อสร้างมันขึ้นมา การสร้าง builder และฟิลด์ด้วยตนเองผสมกับคลาสดั้งเดิมซึ่งดูยุ่งเหยิง @Builder ของ lombok สามารถแก้ปัญหานี้ได้
ที่อยู่เว็บไซต์อย่างเป็นทางการ: https://projectlombok.org/
Lombok หมายเลขเวอร์ชันล่าสุด: http://jcenter.bintray.com/org/projectlombok/lombok/
เอกสารอย่างเป็นทางการ: https://projectlombok.org/features/all
บทนำคำอธิบายประกอบของลอมบอก: https://www.vevb.com/article/151363.htm
ติดตั้งปลั๊กอินลอมบอก
เพิ่มการสนับสนุนคำอธิบายประกอบ
เพิ่มการพึ่งพา
buildScript {ext {springbootversion = '2.0.2.release'} repositories {mavencentral ()} การพึ่งพา {classpath ("org.springframework.boot: spring-boot-gradle-plugin: $ {springbootversion}" 'org.springframework.boot'apply ปลั๊กอิน:' io.spring.dependency-Management 'กลุ่ม =' com.yanjun'version = '0.0.1-snapshot'SourceCompatibility = 1.8 Repositories 'org.springframework.boot: Spring-Boot-Starter-Web',) // เพิ่มการรวบรวมการพึ่งพา Lombok 'org.projectlombok: Lombok: 1.18.0'}คำอธิบายประกอบร่วมกัน
@nonnull Query การประมวลผลที่ว่างเปล่า
แพ็คเกจ com.yanjun.mybatis.bean; นำเข้า lombok.data; นำเข้า lombok.noargsconstructor; นำเข้า lombok.nonnull;@data@noargsconstructorpublic ผู้ใช้ {อายุจำนวนเต็มสาธารณะ; @nonnull ชื่อสตริงสาธารณะ;}เทียบเท่ากับ
แพ็คเกจ com.yanjun.mybatis.bean; นำเข้า lombok.nonnull; ผู้ใช้ระดับสาธารณะ {อายุจำนวนเต็มสาธารณะ; @nonnull ชื่อสตริงสาธารณะ; Public Integer Getage () {return this.age; } @nonnull สตริงสาธารณะ getName () {return this.name; } การตั้งค่าโมฆะสาธารณะ (อายุจำนวนเต็ม) {this.age = อายุ; } โมฆะสาธารณะ setName (@nonnull ชื่อสตริง) {if (name == null) {โยน nullpointerexception ใหม่ ("ชื่อถูกทำเครื่องหมาย @nonnull แต่เป็น null"); } else {this.name = name; -ทดสอบ
ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setName (null);
ผล
ข้อยกเว้นในเธรด "Main Main" java.lang.nullpointerexception: ชื่อมีการทำเครื่องหมาย @nonnull แต่เป็นโมฆะ
ที่ com.yanjun.mybatis.bean.user.setName (user.java:7)
ที่ com.yanjun.mybatis.lombokapplication.main (lombokapplication.java:15)
@Data ให้วิธีการรับและตั้งค่า
แพ็คเกจ com.yanjun.mybatis.bean; นำเข้า lombok.data; @data // สร้างวิธีการรับและตั้งค่าโดยอัตโนมัติผู้ใช้คลาสสาธารณะ {Integer ID; ชื่อสตริง; อายุจำนวนเต็ม; โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// ผู้ใช้วิธีทดสอบผู้ใช้ = ผู้ใช้ใหม่ (); user.setName ("zhaoyanjun"); user.setage (20); user.setId (1); -@การพิมพ์บันทึก SLF4J
แพ็คเกจ com.yanjun.mybatis.bean; นำเข้า lombok.data; นำเข้า lombok.extern.slf4j.slf4j; @data // สร้างวิธีการรับและตั้งค่า @slf4j // การพิมพ์เข้าสู่ระบบ ชื่อสตริง; อายุจำนวนเต็ม; โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setName ("zhaoyanjun"); user.setage (20); user.setId (1); log.info ("เข้าสู่ระบบ" + user.toString ()); -@AllArgSconstructor ตัวสร้างพารามิเตอร์เต็ม
แพ็คเกจ com.yanjun.mybatis.bean; นำเข้า lombok.allargsconstructor; นำเข้า lombok.data; นำเข้า lombok.extern.slf4j.slf4j; @data // สร้าง login @slf4 ชื่อสตริง; อายุจำนวนเต็ม; โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (1, "zhaoyanjun", 20); log.info ("เข้าสู่ระบบ" + user.toString ()); -@ToString สร้างวิธีการ ToString โดยอัตโนมัติ
แพ็คเกจ com.yanjun.mybatis.bean; นำเข้า lombok.allargsconstructor; นำเข้า lombok.data; นำเข้า lombok.toString; นำเข้า lombok.extern.slf4j.slf4j; @data // โดยอัตโนมัติ @ToString (จาก = {"id", "อายุ"}) // toString () เมธอดเฉพาะพิมพ์รหัสชื่อผู้ใช้ระดับฟิลด์ชื่อผู้ใช้ {จำนวนเต็ม ID; ชื่อสตริง; อายุจำนวนเต็ม; โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (1, "zhaoyanjun", 20); log.info ("เข้าสู่ระบบ" + user.toString ()); -วิธีการ ToString () ไม่รวมฟิลด์
// ยกเว้นฟิลด์ @ToString (exclude = {"name"}) // ในเมธอด toString () ฟิลด์ชื่อไม่ได้เข้าร่วมในการพิมพ์@Value ใช้ในการใส่คำอธิบายประกอบชั้นสุดท้าย
คำอธิบายประกอบ @Value นั้นคล้ายกับ @Data ความแตกต่างคือมันจะกำหนดตัวแปรสมาชิกทั้งหมดเป็นการปรับเปลี่ยน private final โดยค่าเริ่มต้นและจะไม่สร้างวิธี set
แพ็คเกจ com.yanjun.mybatis.bean; นำเข้า lombok.value; @ValuePublic ผู้ใช้คลาส {จำนวนเต็ม ID = 1; ชื่อสตริง = "zhaoyanjun"; อายุจำนวนเต็ม = 3;}รวบรวมรหัส
ผู้ใช้ระดับสุดท้ายสาธารณะ {ID จำนวนเต็มสุดท้ายส่วนตัว = 1; ชื่อสตริงสุดท้ายส่วนตัว = "Zhaoyanjun"; อายุจำนวนเต็มสุดท้ายส่วนตัว = 3; ผู้ใช้สาธารณะ () {} จำนวนเต็มสาธารณะ getId () {return this.id; } สตริงสาธารณะ getName () {this.getClass (); กลับ "Zhaoyanjun"; } Public Integer Getage () {return this.age; } // ละเว้นรหัสบางส่วน ...... }@builder: เพิ่มรูปแบบตัวสร้างในคลาสคำอธิบายประกอบ
นำเข้า lombok.builder; @builderpublic user user {ID จำนวนเต็มสาธารณะ; ชื่อสตริงสาธารณะ; อายุจำนวนเต็มสาธารณะ}เทียบเท่ากับรหัสต่อไปนี้
แพ็คเกจ com.yanjun.mybatis.bean; ผู้ใช้ระดับสาธารณะ {ID จำนวนเต็มสาธารณะ; ชื่อสตริงสาธารณะ; อายุจำนวนเต็มสาธารณะ ผู้ใช้ (ID จำนวนเต็ม, ชื่อสตริง, อายุจำนวนเต็ม) {this.id = id; this.name = ชื่อ; this.age = อายุ; } public user.userBuilder builder () {ส่งคืน user.userBuilder (); } ผู้ใช้ระดับสาธารณะระดับสแตติกผู้ใช้ {ID จำนวนเต็มส่วนตัว; ชื่อสตริงส่วนตัว; อายุจำนวนเต็มส่วนตัว userbuilder () {} public user.userBuilder id (ID จำนวนเต็ม) {this.id = id; คืนสิ่งนี้; } user.userBuilder ชื่อ (ชื่อสตริง) {this.name = name; คืนสิ่งนี้; } public user.userBuilder อายุ (อายุจำนวนเต็ม) {this.age = อายุ; คืนสิ่งนี้; } ผู้ใช้สาธารณะ build () {ส่งคืนผู้ใช้ใหม่ (this.id, this.name, this.age); } สตริงสาธารณะ toString () {return "user.userBuilder (id =" + this.id + ", name =" + this.name + ", age =" + this.age + ");}}}ใช้
ผู้ใช้ userbuilder userbuilder = user.builder (); ผู้ใช้ผู้ใช้ = userbuilder .age (10) .id (1) .name ("yanjun") .build (); system.out.println (":" + userbuilder.toString ();@Synchronized: เพิ่มการล็อคการซิงโครไนซ์
แพ็คเกจ com.yanjun.mybatis.bean; นำเข้า lombok.synchronized; ผู้ใช้ระดับสาธารณะ {อายุจำนวนเต็มสาธารณะ; ชื่อสตริงสาธารณะ; // วิธีธรรมดาเทียบเท่ากับวัตถุล็อค @Synchronized int run1 () {return 1; } // วิธีการคงที่เทียบเท่ากับคลาสล็อค @synchronized int int run2 () {return 2; -ผลกระทบของรหัสเทียบเท่ากับ
ผู้ใช้ระดับสาธารณะ {วัตถุสุดท้ายส่วนตัว $ lock = วัตถุใหม่ [0]; วัตถุสุดท้ายคงที่ส่วนตัว $ lock = วัตถุใหม่ [0]; อายุจำนวนเต็มสาธารณะ ชื่อสตริงสาธารณะ; ผู้ใช้สาธารณะ () {} int run1 () {object var1 = this. $ lock; ซิงโครไนซ์ (นี่คือ $ lock) {return 1; }} int คงที่ run2 () {object var0 = $ lock; ซิงโครไนซ์ ($ lock) {return 2; -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น