Введение
lombok -это плагин на уровне компиляции, который может генерировать некоторый код при составлении проекта. Например, во время ежедневной разработки необходимо создать большое количество файлов JavaBean . Каждому JavaBean необходимо обеспечить большое количество методов get и set . Если есть много полей и изменений, то модифицировать относительно громоздко. Соответствующий lombok может спасти нас за проблемой создания getter и методов setter с помощью аннотаций (@getter,@setter) . Он может автоматически генерировать методы getter и setter , когда мы составляем исходный код.
То есть эффект, который он может достичь, является: в исходном коде нет методов getter и setter , но в скомпилированном файле Bytecode есть методы getter и setter .
Кроме того, на этапе разработки проекта свойства class постоянно меняются. Поле может быть добавлено сегодня, и завтра может быть удалено поле. Каждое изменение требует изменения соответствующего кода шаблона. Кроме того, в некоторых class так много полей, что они не могут закончить с первого взгляда. Если вы добавите код шаблона, его еще сложнее увидеть. Более того, потому что есть слишком много полей, я хочу использовать builder для его создания. Вручное создание builder и поля смешивается с оригинальным классом, который выглядит грязным. lombok 's @Builder может решить эту проблему.
Официальный адрес веб -сайта: https://projectlombok.org/
Последний номер версии Lombok: http://jcenter.bintray.com/org/projectlombok/lombok/
Официальный документ: https://projectlombok.org/features/all
Аннотация Ломбока Введение: https://www.vevb.com/article/151363.htm
Установите плагин Lombok
Добавить поддержку аннотаций
Добавить зависимости
BuildScript {ext {SpringBootVersion = '2.0.2.Release'} Repositories {mavencentral ()} зависимости {classPath ("org.springframework.boot: Spring-Boot-Gradle-Plugin: $ {SpringBootVersion}")} apply: 'java'plugin:' plugin: 'ecpseply ecliply eclish 'org.springframework.boot'Apply плагин:' io.spring.sependency-management 'group =' com.yanjun'version = '0.0.1-snapshot'sourcepautibale = 1,8Repositories {mavencentral ()} зависимости {compile (' org.springframe. 'org.springframework.boot: Spring-Boot-Starter-Web',) // Добавить компиляцию зависимости Lombok 'org.projectlombok: Lombok: 1.18.0'}Общие аннотации
@Nonnull Query пустая обработка
пакет com.yanjun.mybatis.bean; import lombok.data; import lombok.noargsconstructor; import lombok.nonnull;@data@noargscstrontrouproupbublic Class Пользователь {Public Integer Age; @Nonnull public String name;}Эквивалентно
пакет com.yanjun.mybatis.bean; import lombok.nonnull; Пользователь открытого класса {Public Integer Age; @Nonnull public String name; public integer getage () {return this.age; } @Nonnull public String getName () {return this.name; } public void setage (целый возраст) {this.age = age; } public void setName (@nonnull String name) {if (name == null) {бросить новое NullPointerException ("Имя помечено @Nonnull, но null"); } else {this.name = name; }}}тест
User user = new user (); user.setname (null);
Эффект
Исключение в потоке "Main" java.lang.nullPointerException: имя помечено @nonnull, но это null
на com.yanjun.mybatis.bean.user.setname (user.java:7)
на com.yanjun.mybatis.lombokapplication.main (lombokapplication.java:15)
@Data предоставляет методы получения и установки
пакет com.yanjun.mybatis.bean; import lombok.data; @data // Автоматически генерировать методы получения и установить String name; Целое число возраста; public static void main (string [] args) {// метод тестирования пользователь пользователь = new user (); user.setName ("Zhaoyanjun"); user.setage (20); user.setid (1); }}@SLF4J Журнальная печать
пакет com.yanjun.mybatis.bean; import lombok.data; import lombok.extern.slf4j.slf4j; @data // Автоматически генерировать методы получения и установить @slf4j // rougin printing public class user {integer id; String name; Целое число возраста; public static void main (string [] args) {user user = new user (); user.setName ("Zhaoyanjun"); user.setage (20); user.setid (1); log.info ("login" + user.tostring ()); }}@AllargSconstructor Полный конструктор параметров
package com.yanjun.mybatis.bean;import lombok.AllArgsConstructor;import lombok.Data;import lombok.extern.slf4j.Slf4j;@Data //Automatically generate get and set methods @AllArgsConstructor //Automatically generate full parameter constructor @Slf4j //Login printing public class User { Integer id; String name; Целое число возраста; public static void main (string [] args) {user user = новый пользователь (1, "Zhaoyanjun", 20); log.info ("login" + user.tostring ()); }}@ToString автоматически генерировать метод ToString
package com.yanjun.mybatis.bean;import lombok.AllArgsConstructor;import lombok.Data;import lombok.ToString;import lombok.extern.slf4j.Slf4j;@Data //Automatically generate get and set methods @AllArgsConstructor //Automatically generate full parameter constructor @Slf4j //Login print @ToString(of = {"id", "age"}) // method toString () только напечатает идентификатор, поля имени открытого класса пользователь {integer id; String name; Целое число возраста; public static void main (string [] args) {user user = новый пользователь (1, "Zhaoyanjun", 20); log.info ("login" + user.tostring ()); }}Метод ToString () исключает поля
// EXLLUDE FIELD @ToString (exkude = {"name"}) // В методе ToString () поле не участвует в печати@Value используется для аннотирования окончательных классов
Аннотация @Value аналогична @Data , разница в том, что она будет определять все переменные элемента как private final модификацию по умолчанию и не будет генерировать метод set .
пакет com.yanjun.mybatis.bean; импортировать lombok.value; @ValuePublic Class User {Integer id = 1; String name = "Zhaoyanjun"; Целое число возраста = 3;}Скомпилированный код
public final Class User {Private Final Integer ID = 1; частная финальная строка name = "Zhaoyanjun"; Частный конечный целый возраст = 3; public user () {} public integer getId () {return this.id; } public String getName () {this.getClass (); вернуть "Zhaoyanjun"; } public integer getage () {return this.age; } // Опустите какой -то код ......}@Builder: добавьте шаблон конструктора в аннотированный класс
Import lombok.builder; @builderpublic Class Пользователь {public integer id; Общественное название строки; Public Integer Age;}Эквивалент следующего кода
пакет com.yanjun.mybatis.bean; пользователь открытого класса {public integer id; Общественное название строки; общественный целый возраст; User (INTEGER ID, String Name, Integer Age) {this.id = id; this.name = name; this.age = возраст; } public Static user.UserBuilder Builder () {return new user.userBuilder (); } public Static Class UserBuilder {Private Integer Id; Приватное название строки; частный целый возраст; UserBuilder () {} public user.UserBuilder ID (INTEGER ID) {this.id = id; вернуть это; } public user.UserBuilder имя (String name) {this.name = name; вернуть это; } public user.userBuilder Age (Integer Age) {this.age = age; вернуть это; } public User build () {вернуть новый пользователь (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: добавить блокировку синхронизации
пакет com.yanjun.mybatis.bean; import lombok.synchronized; Пользователь открытого класса {public integer age; Общественное название строки; // обычный метод, эквивалентный блокировке объекта @synchronized int run1 () {return 1; } // Статический метод, эквивалентный блокировке класса @synchronized static int run2 () {return 2; }}Эффект кода эквивалентен на
Пользователь открытого класса {private Final Object $ lock = new Object [0]; Частный статический конечный объект $ lock = new Object [0]; общественный целый возраст; Общественное название строки; public user () {} int run1 () {object var1 = this. $ lock; синхронизированный (this. $ lock) {return 1; }} static int run2 () {object var0 = $ lock; синхронизированный ($ lock) {return 2; }}}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.