日常开发发现
思考:大家看到如下代码,有发现什么问题呢?
是不是很多@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
是不是上面的代码不管是整洁度,还是代码观感都十分优雅了,而且我们不用在属性上加上@Resource 或者@Autowired,只需要像书写最终属性一样即可,而且我们还可以通过点击左边的小点,找到实现类。
原理解读
@RequiredArgsConstructor 这个属性是Lombok依赖提供的,作用域在类上,作用是生成所需要参数的构造函数,但是注意:字段必须是final修饰和具有@NonNull等约束的字段(这里的 final 和 @NonNull 满足其一即可)
之前如果我们需要使用构造器注入,则需要手动书写构造器,而是对于后续更多Bean的注入,我们又需要重新在构造器中添加需要注入的Bean参数,略显繁琐,但是如今通过这种方法就可以省去了这个步骤,并且是Spring官方推荐的Bean注入方式。
特别注意
对于Lombok比较熟悉的人来说,肯定知道@AllArgsConstructor,这个注解可以生成该类下的全部属性的构造方法,那他们的区别是什么呢?
@AllArgsConstructor:生成该类下全部属性的构造方法。
@RequiredArgsConstructor:生成该类下被final修饰或者带有@NonNull的构造方法。
使用@AllArgsConstructor之后, @Value就会不起作用
可以使用@RequiredArgsConstructor代替
——转载自:本当迷