文档章节

利用Lombok编写优雅的spring依赖注入代码,去掉繁人的@Autowired

HeyS1
 HeyS1
发布于 09/26 19:27
字数 275
阅读 1193
收藏 50

大家平时使用spring依赖注入,都是怎么写的?

@Service
public class OrderService {
    @Autowired
    private UserService userService;

}

是不是很熟悉的感觉?但是呢 如果你用IDEA的话呢,它会提示你

Field injection is not recommended

大概就是spring 不推荐建使用这个方式。原因网上很多啦:https://blog.csdn.net/github_38222176/article/details/79506392

下面就是spring推荐的写法:

@Service
public class OrderService {
    private final UserService userService;


    @Autowired
    public OrderService(UserService userService) {
        this.userService = userService;
    }
}

 

若是注入的类太多的话呢,看起来挺繁琐的。最近偶然在网上发现使用Lombok可以写出简洁的代码:

@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class OrderService {
    //这里必须是final,若不使用final,用@NotNull注解也是可以的
    private final UserService userService;

}

 

这样写实际上编译后和spring推荐的写法是一样的哦,是不是很简洁

 

© 著作权归作者所有

共有 人打赏支持
HeyS1
粉丝 12
博文 49
码字总数 29535
作品 1
广州
程序员
私信 提问
加载中

评论(21)

曾玉飞
声明为 final 就无法使用无参构造函数
myhnuhai
myhnuhai
不推荐这样用,降低了可读性,你让一个新手读代码一脸蒙蔽。
HeyS1
HeyS1

引用来自“idoz”的评论

那么问题来了@Resource 不行!
@Resource确实不行,不过文章标题是去掉@Autowired啦。😏
idoz
idoz
那么问题来了@Resource 不行!
HeyS1
HeyS1

引用来自“翠翠”的评论

jdk 1.8 可以写成:@RequiredArgsConstructor(onConstructor_ = @Autowired)

引用来自“HeyS1”的评论

似我试了下,乎不可以

引用来自“翠翠”的评论

不会的,我试过的,可以用,而且这是官方文档里写的。
我这边是jdk8,但用IDEA会提示语法错误= =
HeyS1
HeyS1

引用来自“罗树鹏”的评论

这种方式我是不会用的,对人不友好
代码又要人容易看得懂,又要写得简洁,本来就有一定的矛盾。有取舍吧
翠翠
翠翠

引用来自“翠翠”的评论

jdk 1.8 可以写成:@RequiredArgsConstructor(onConstructor_ = @Autowired)

引用来自“HeyS1”的评论

似我试了下,乎不可以
不会的,我试过的,可以用,而且这是官方文档里写的。
罗树鹏
罗树鹏
这种方式我是不会用的,对人不友好
傻傻躺着
傻傻躺着
感觉没什么区别,注解而已
HeyS1
HeyS1

引用来自“翠翠”的评论

jdk 1.8 可以写成:@RequiredArgsConstructor(onConstructor_ = @Autowired)
似我试了下,乎不可以
Spring系列之Spring常用注解总结

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点: 1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么...

HJCui
05/29
0
0
@Autowired与@Resource的区别

1、@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。 2、@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果...

随智阔
2014/03/07
0
1
spring @Autowired 与@Resource的区别

Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。 @Resource的作用相当于@Autowired,只不过@Autowire...

xf_xin
2012/12/03
0
0
springboot+security整合1

说明springboot版本2.0.3 一、 介绍   Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的B...

烦嚣的人
07/23
0
0
使用Spring2.5的Autowired实现注释型的IOC

使用Spring2.5的新特性——Autowired可以实现快速的自动注入,而无需在xml文档里面添加bean的声明,大大减少了xml文档的维护。(偶喜欢这个功能,因为偶对xml不感冒)。 以下是一个例子: 先...

沉默的子明
2014/05/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
10
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
17
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
11
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部