Spring 依赖注入最佳实践?

2022-02-21 19:56:52 +08:00
 tinotino654321
Spring 官方文档里推荐的是用 Constructor 注入,可选依赖用 Setter 注入。
但是实际在项目里一般用哪种注入呢?
我工作没多久,见到的大部分都是用 Field 注入。
5238 次点击
所在节点    Java
50 条回复
NotFoundEgg
2022-02-21 23:51:35 +08:00
我一般用构造器注入
用 Autowired 注入 idea 会有警告,看着难受
leeg810312
2022-02-21 23:52:51 +08:00
顺便问下,service 接口实现按推荐的构造函数注入依赖,那么单元测试 mockito 怎么写比较好
Kontinue
2022-02-22 08:25:37 +08:00
@NotFoundEgg 同,idea 推荐哪种方式用哪种哈哈哈,不然全是波浪线和 warning 很难受。人家既然给出提示肯定是有他的必要性的
thetbw
2022-02-22 09:11:17 +08:00
@appstore54321 我们从没写过单元测试😅
chendy
2022-02-22 09:19:41 +08:00
@leeg810312 直接 @ Mock 定义 mock 依赖,然后自己把 service new 出来
hingbong
2022-02-22 09:24:28 +08:00
kotlin 表示一般用 constructor, 偶尔是 setter
gitdoit
2022-02-22 09:25:33 +08:00
idea 治好了我用 @Autowired 的毛病
sheeta
2022-02-22 09:26:15 +08:00
@Kontinue @Resource 注入就没有警告了,哈哈
summerLast
2022-02-22 09:56:18 +08:00
同一楼 final 字段 + 构造方法注入 + lombok 的 RequireArgsConstructor 注解
补 需要 注入值的 或 特殊的 不用 final 修饰 自己手动加对应注解
qaqLjj
2022-02-22 09:57:08 +08:00
@sutra 这篇文章讲了 constructor 注入可以防止空指针,但是我试了 `@AutoWired/@Resource` 注解,用这两个注解时,缺依赖的话 springboot 都启动不起来,所以不管是构造器注入还是字段注入都不会造成空指针啊
wolfie
2022-02-22 09:58:41 +08:00
@qaqLjj #30
构造器注入,没有合格的 bean 一样没法创建。
hambers
2022-02-22 10:14:25 +08:00
构造器注入 如果以来的注入对象很多的话,构造方法不是参数很多的样子。 强迫症看着有点不舒服,有啥好办法么
Edsie
2022-02-22 10:29:11 +08:00
推荐构造器注入,但实际用的时候常用 @AutoWired
banmuyutian
2022-02-22 11:40:04 +08:00
@hambers #32
lombok 注解
xuanbg
2022-02-22 11:47:33 +08:00
field 注入最简单,但安全性不太好。我都是用构造器注入,这样不会飘红,强迫症你们不用学。
xuanbg
2022-02-22 11:48:39 +08:00
@hambers 注入对象很多的话,你要反思自己的代码结构是否合理了。
NotFoundEgg
2022-02-22 11:54:44 +08:00
@hambers
Lombok 的 RequireArgsConstructor 注解可以解决这个问题,但从设计上来说一个类注入了过多的对象,可能违背了单一职责原则(虽然实际上来说这种情况确实特别常见🤣)
wolfie
2022-02-22 12:02:37 +08:00
@appstore54321 #20
单元测试时候 脱离 spring ?
dcsuibian
2022-02-22 12:04:38 +08:00
Constractor ,因为 idea 不会有波浪线。(测试的那里不会有)
循环依赖用 settter
chendy
2022-02-22 12:15:24 +08:00
@wolfie 依赖全 mock ,直接脱离 spring 单独跑
spring 的测试工具其实更多是集成测试不是单元测试(带数据库和接口之类的)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/835484

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX