Les annotations de Lombok qu'un architecte n'utiliserait pas sont si belles!

J'ai vu de nombreux camarades de classe s'opposer à Lombok en ajoutant secrètement des plug-ins. C'est la vérité de la vérité. En disant non, le corps est très honnête. Ceux qui s'y opposent n'auraient jamais dû voir un code commercial long et compliqué, et sont toujours plongés dans leur propre perfectionnisme pathologique. Original: N'enviez pas les canards mandarins ou les immortels, ajustez une ligne de code pendant longtemps.

En même temps, du matériel d'apprentissage gratuit est fourni. Le contenu de la technologie d'apprentissage comprend: Spring, Dubbo, MyBatis, RPC, analyse de code source, haute concurrence, haute performance, distribué, optimisation des performances, développement d'architecture avancée de microservices, etc.

Les amis dans le besoin peuvent cliquer: cliquez dessus! Cliquez ici! , Code: csdn.

Insérez la description de l'image ici

Nous devons donc faire face à l'environnement de travail sale et désordonné et à la réalité.

Lombok peut éliminer la verbosité de Java, réduire la longueur du code et déplacer le focus là où il doit être concentré. SpringBoot a placé Lombok dans ses dépendances. Java14 a même emprunté à cette idée et introduit la syntaxe d'enregistrement, qui est similaire à la suivante:

record Point(int x, int y) { }

Cet article n'a pas l'intention de discuter de quelque chose de similaire aux annotations @Data. Nous discutons d'un commentaire qui est plus partiel, mais qui vous fait vous sentir mal de vous voir tard: RequiredArgsConstructor.

Injection d'attributs explosifs

Spring fournit deux modes d'injection, qui sont également trois méthodes d'écriture DI souvent demandées par les programmeurs très débutants. L'un est l'injection d'attributs (injection classée), l'autre via la méthode setter et l'autre est l'injection de constructeur.

Huohuo, j'ai menti. On me pose souvent des questions sur byName et byType. Cependant, ces années, nous avons utilisé davantage d'annotations @Autowired.

Le code est généralement écrit comme ceci.

@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;
}

Ce n'est généralement pas un problème, car les champs injectés sont limités. Mais si vous n'avez pas vu de code de projet, vous serez trompé par cette apparence parfaite dans le monde de la programmation.

Les codes métier, aucun commentaire et un seul fichier de plus de 2000 lignes abondent. Les attributs injectés peuvent atteindre plus d'une douzaine. Cette partie du code injecté est vraiment compliquée.

Non seulement cela, ces champs deviendront également gris dans l'EDI, vous indiquant que le code est devenu moche sans être initialisé.
Insérez la description de l'image ici
En fait, depuis Spring 4.0, il n'est pas recommandé d'utiliser le mode d'injection d'attributs , car il nous permet d'ignorer certains dangers cachés de corruption de code. Vous pouvez rechercher vous-même ce problème, nous n'entrerons pas dans le détail.

Puisque Spring recommande d'utiliser les méthodes Setter et Constructor affichées, changeons le schéma d'implémentation.

La méthode Setter utilise essentiellement moins de personnes, car elle est plus odorante et plus longue. Si vous écrivez une méthode définie pour chaque attribut, je suppose que vous aurez des problèmes même en utilisant le générateur de code.

Injection de constructeur

Ensuite, la méthode constructeur est devenue notre premier choix.

L'exemple de code est le suivant:

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 n'a pas besoin d'ajouter d'autres annotations, vous pouvez utiliser le constructeur pour terminer l'injection. Le problème est que nous devons encore écrire beaucoup de code.

À ce stade, vous avez peut-être pensé à l'annotation AllArgsConstructor de Lombok. Mais c'est pour tous les attributs, s'il y a des attributs non-Bean dans la classe, Spring sera confus.

À ce stade, vous pouvez utiliser RequiredArgsConstructor.

code montrer comme ci-dessous.

@Service
@RequiredArgsConstructor
public class GoodsServiceImpl implements GoodsSrv {
    final GoodsRepo goodsRepo;
    final TagRepo tagRepo;
    final TagRefRepo tagRefRepo;
    final BrandRepo brandRepo;
    final UnitRepo unitRepo;
}

Nous modifions les attributs qui doivent être injectés dans les types finaux (ou utilisons l'annotation @NotNull, ce qui n'est pas recommandé), et ces attributs formeront le constructeur par défaut. Java nécessite que les propriétés du type final soient initialisées et le code deviendra rouge s'il n'y a pas de constructeur.

Nous pouvons voir l'EDI modifié et l'invite grise ennuyeuse a disparu.
Insérez la description de l'image ici
Un tel code est très concis.

Plus avancé

RequiredArgsConstructor annotation, vous pouvez également écrire comme suit. Même si vous changez @ en @ ou en @ , il peut toujours fonctionner normalement.

@RequiredArgsConstructor(onConstructor = @__(@Autowired))

Cela signifie ajouter une annotation @Autowired à la méthode constructeur générée par Lombok. C'est la syntaxe complète de Lombok, mais maintenant Spring peut fonctionner sans ajouter de telles annotations.

Regardez mon code ci-dessous, il peut réellement fonctionner. Malheureux?

@RequiredArgsConstructor(onConstructor = 
@______________________________________(
        @Autowired
))

Quelle terrible beauté!

Fin

De cette manière, le nombre de lignes de code que vous écrivez peut considérablement diminuer. Dans une entreprise qui contribue au nombre de lignes de code, cela peut vous aider à obtenir 3,25, mais ce 3,25 est fier.

Enfin, il existe des points de connaissances de base Java + un ensemble complet de supports et de vidéos d'apprentissage pour les architectes + des livres d'interview de première ligne + des modèles de CV d'interview peuvent être obtenus + Alibaba Meituan Netease Tencent Xiaomi Iqiyi Kuaishou Bilibili questions d'entretien + Collection de code source Spring + Java Livre électronique pratique d'architecture + dernières questions d'entretien de 2020 des principaux fabricants.

Les amis dans le besoin peuvent cliquer: cliquez dessus! Cliquez ici! , Code: csdn.

Insérez la description de l'image ici
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/HarderXin/article/details/109479381
conseillé
Classement