2025年了请使用更加优雅的Bean注入(@Resource过时了)

Java

日常开发发现

思考:大家看到如下代码,有发现什么问题呢?

picture.image

是不是很多@Resource,造成不仅是代码的整洁度,还是代码观感,其实都不是很好,我们常常说尽量消除冗余代码,增强复用,那么这里的注解我们是不是可以消除掉呢?

[顺便推个机会]

大厂摇人,前、后端/测试机会,偶尔有加班,加班有加班费,、薪酬待遇还不错。

Spring官方更推荐我们使用构造器注入

原先使用 @Autowired 注解官方会提示我们:删除此字段注入并使用构造函数注入

Remove this field injection and use constructor injection instead.

并且会以一个波浪线警告的形式出现,有代码洁癖的人会极度不舒适

@Resource 这个注解不是Spring官方提供的,而是J2EE(Java 250 规范提案)提供的,它不会有波浪线警告

两个注解最大区别就是:

@Autowired根据 By Type 查找Bean,如果存在多个Bean,再根据 By Name 查找Bean

@Resource根据By Name查找Bean,如果ByName找不到Bean,再根据By Type查找Bean

其实,两种方式都是通过setter方式进行注入,终究不是Spring官方推荐的方式

我们能不能使用构造器注入,么稳态啦!

我们能不能优雅的构造器注入,么稳态啦!

代码整洁优化

前提引入Lombok依赖,这个依赖出现很多纷争,有些人推荐用,有些人不推荐用,可根据各公司实际情况使用

使用 @RequiredArgsConstructor + final @NonNull field 实现构造器注入Bean

picture.image

是不是上面的代码不管是整洁度,还是代码观感都十分优雅了,而且我们不用在属性上加上@Resource 或者@Autowired,只需要像书写最终属性一样即可,而且我们还可以通过点击左边的小点,找到实现类。

原理解读

@RequiredArgsConstructor 这个属性是Lombok依赖提供的,作用域在类上,作用是生成所需要参数的构造函数,但是注意:字段必须是final修饰和具有@NonNull等约束的字段(这里的 final 和 @NonNull 满足其一即可)

picture.image

之前如果我们需要使用构造器注入,则需要手动书写构造器,而是对于后续更多Bean的注入,我们又需要重新在构造器中添加需要注入的Bean参数,略显繁琐,但是如今通过这种方法就可以省去了这个步骤,并且是Spring官方推荐的Bean注入方式。

特别注意

对于Lombok比较熟悉的人来说,肯定知道@AllArgsConstructor,这个注解可以生成该类下的全部属性的构造方法,那他们的区别是什么呢?

@AllArgsConstructor:生成该类下全部属性的构造方法。

@RequiredArgsConstructor:生成该类下被final修饰或者带有@NonNull的构造方法。


使用@AllArgsConstructor之后, @Value就会不起作用

可以使用@RequiredArgsConstructor代替

——转载自:本当迷

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生数据库 veDB 核心技术剖析与展望
veDB 是一款分布式数据库,采用了云原生计算存储分离架构。本次演讲将为大家介绍火山引擎这款云原生数据库的核心技术原理,并对未来进行展望。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论