Оригинал: Не завидуйте мандаринкам или бессмертным, просто долго корректируйте строку кода. Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.
Я видел много оппозицииLombok
Мои одноклассники тайно добавили плагин сзади, это принцип Zhenxiang. Рот говорит нет, тело честно. Те, кто выступает против этого, должны были никогда не видеть длинного и сложного делового кодекса и все еще погружены в собственный патологический перфекционизм.
Чтобы столкнуться с грязной и грязной рабочей средой, посмотрите правде в глаза.
Lombok избавляет Java от многословия, сокращает длину кода и перемещает фокус туда, где он должен быть. SpringBoot поставил Lombok в свои зависимости, а Java14 даже позаимствовала эту идею и запустилаrecord
Синтаксис аналогичен следующему:
record Point(int x, int y) { }
В этой статье не будет обсуждаться что-то похожее на аннотацию @Data. Давайте обсудим более необычную заметку, которая заставляет вас чувствовать, что уже слишком поздно:RequiredArgsConstructor
.
Взрывная инъекция свойства
Spring
Предоставляет два режима внедрения, о которых также часто спрашивают очень младших программистов.DI
написание. один属性注入
(Полевая инъекция), один через метод установки, другой构造器注入
.
Хохо, я солгал, что часто спрашиваютbyName
иbyType
. Однако в этом году мы используем больше@Autowired
аннотация.
Код обычно пишется так.
@Service
public class GoodsServiceImpl implements GoodsSrv {
@Autowired
private GoodsRepo goodsRepo;
@Autowired
private TagRepo tagRepo;
@Autowired
private TagRefRepo tagRefRepo;
@Autowired
private BrandRepo brandRepo;
@Autowired
private UnitRepo unitRepo;
}
Как правило, это нормально, так как вводимые поля ограничены. Но если вы не видели код проекта, вас одурачит видимость совершенства программирования.
Бизнес-код, раскомментированный, и один файл длиной более 2000 строк можно найти везде. Вводимых свойств может достигать дюжины. Эта часть кода инъекции действительно запутана.
Мало того, эти поля также будут выделены серым цветом в среде IDE, говоря вам, что они не инициализированы и код стал уродливым.
Фактически, начиная с Spring 4.0,Не рекомендуется использовать режим внедрения атрибутов, причина в том, что это позволяет нам игнорировать некоторые скрытые опасности того, что код может испортиться. Вы можете сами поискать эту проблему, и мы не будем вдаваться в нее.
Поскольку Spring рекомендует использовать отображаемые методы Setter и Constructor, давайте поменяем реализацию.
Метод Setter в основном используется меньшим количеством людей, потому что он более вонючий и более длительный. Если вы напишете метод set для каждого свойства, я думаю, вы облажаетесь даже с генераторами кода.
Внедрение конструктора
Затем метод конструктора стал нашим первым выбором.
Пример кода выглядит следующим образом:
public class GoodsServiceImpl implements GoodsSrv {
private GoodsRepo goodsRepo;
private TagRepo tagRepo;
private TagRefRepo tagRefRepo;
private BrandRepo brandRepo;
private UnitRepo unitRepo;
public GoodsServiceImpl(
GoodsRepo goodsRepo,
TagRepo tagRepo,
TagRefRepo tagRefRepo,
BrandRepo brandRepo,
UnitRepo unitRepo) {
this.goodsRepo = goodsRepo;
this.tagRefRepo = tagRefRepo;
this.tagRefRepo = tagRefRepo;
this.brandRepo = brandRepo;
this.unitRepo = unitRepo;
this.tagRepo = tagRepo;
}
}
Spring может использовать конструктор для завершения инъекции без добавления других аннотаций. Проблема в том, что нам все еще нужно написать много кода.
В это время вы, возможно, подумали о Ломбоке.AllArgsConstructor
аннотация. Но это для всех свойств, если в классе есть какие-то не Bean-свойства, Spring будет сбит с толку.
В это время вы можете использоватьRequiredArgsConstructor
.
код показывает, как показано ниже.
@Service
@RequiredArgsConstructor
public class GoodsServiceImpl implements GoodsSrv {
final GoodsRepo goodsRepo;
final TagRepo tagRepo;
final TagRefRepo tagRefRepo;
final BrandRepo brandRepo;
final UnitRepo unitRepo;
}
Мы модифицируем свойства, которые необходимо внедрить вfinal
type (или с аннотацией @NotNull, что не рекомендуется), эти свойства будут составлять конструктор по умолчанию. Java требует, чтобы свойства конечного типа были инициализированы, и если нет конструктора, код станет красным.
Мы видим измененную IDE, и раздражающая серая подсказка исчезла.
Такой код очень лаконичен.
немного более продвинутый
В аннотации RequiredArgsConstructor вы также можете написать, как показано ниже. даже поставить@__
заменить@_
, или замените его на@___
, также может нормально работать.
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
Это означает, что к методу конструктора, сгенерированному Lombok, добавьте@Autowired
аннотация. Это синтаксис Lombok насквозь, но теперь Spring не нужно добавлять такие аннотации для запуска.
Посмотрите на мой код ниже, он действительно работает. Вы счастливы?
@RequiredArgsConstructor(onConstructor =
@______________________________________(
@Autowired
))
Это ужасно красиво!
End
Таким образом, количество строк кода, которое вы пишете, может резко сократиться. В компании, которая занимается теорией чисел строк кода, это может помочь вам получить 3,25, но эта 3,25 гордится этим.
Эти маленькие хитрости, xjjdog говорит об одном меньше, если вы придете к трехсторонней дружбе, может быть, вы сможете пройти через мои две линии Ren и Du, и вы сможете использовать меньше рекламы и больше галантереи в будущем.
Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.