Java 后台开发,大家用 @Autowired 多么

2022-07-23 12:46:26 +08:00
 NoKey

到处文章都在说,不建议 @Autowired ,推荐构造器注入 但是我见识的项目,大部分都是 @Autowired 想请教一下大家,平时用哪种注入比较多

6304 次点击
所在节点    程序员
50 条回复
unregister
2022-07-23 15:24:38 +08:00
不建议使用,@Autowired Spring 不推荐,但是呢大家都在用。构造器有利于进行单元测试。
nosugar
2022-07-23 15:29:50 +08:00
项目中用的还是挺多的
savingrun
2022-07-23 15:49:26 +08:00
建议使用构造函数注入 +1
配合 lombok 的 @RequiredArgsConstructor

例子:

@Service
@RequiredArgsConstructor
public class xxxxServiceImpl implements xxxAppService, xxxAdminService {

private final xxxxDao dao;

}
Bingchunmoli
2022-07-23 16:50:24 +08:00
普通用构造函数,循环依赖用 autowired , 没有谁更好只有谁更适合
chrisia
2022-07-23 17:09:45 +08:00
@Autowired 能解决循环依赖,所以出现循环依赖我就用 @Autowired ,其他情况用构造注入
fpure
2022-07-23 17:11:16 +08:00
我不太理解,为什么有人愿意使用 Lombok 这种语法层侵入的库却排斥 Autowired
kkkiio
2022-07-23 17:30:11 +08:00
@fpure 因为 Lombok 很容易去掉(自己写 /生成一个构造函数就可以了),而 Autowired 依赖 Spring IoC 才能实现正确:你可以简单 new 一个 component ,不给 /忘记给它设置标志了 @Autowired 的属性,编译能过但运行错误。

用构造函数取代 Autowired 核心就是用语言标准取代第三方标准,用编译错误取代运行时错误。
kkkiio
2022-07-23 17:32:40 +08:00
@kkkiio 用 Autowired 会遇到麻烦的最常见情景是单元测试,你要么暴露 Autowired 字段的 setter ,要么改成构造函数去初始化该字段
mind3x
2022-07-23 18:41:36 +08:00
看样子很多人不知道,单构造函数的类甚至不需要标注任何 `@Autowired`, Spring 默认就会从构造函数注入。
kaneg
2022-07-23 19:27:19 +08:00
的确知道应该使用构造方法而不是 Autowired ,但它就是顺手啊
ychost
2022-07-23 20:37:59 +08:00
很多时候需要 require = false 方便点
Oktfolio
2022-07-23 20:50:43 +08:00
我不用
Oktfolio
2022-07-23 20:51:23 +08:00
同事用 @Resource 比 @Autowired
Rumble66
2022-07-23 21:29:49 +08:00
构造器注入不能够像 Autowired 那样解决循环依赖
另外有一点, 为什么说循环依赖的代码是烂代码呢? AB 两个服务相互调用不是很常见的事情吗?
wellerman
2022-07-24 01:07:18 +08:00
构造器注入+setter 注入,循环依赖都解决了。
Bingchunmoli
2022-07-24 01:13:22 +08:00
@mind3x 通常没有构造方法
iPisces77
2022-07-24 02:18:42 +08:00
同事喜欢用 @Autowired,我更喜欢自己用构造器注入,顺便循环依赖开始的时候就解决掉,重构
11232as
2022-07-24 11:28:42 +08:00
构造器注入啊,写测试多舒服
sutra
2022-07-24 11:44:25 +08:00
@wellerman @Lazy 可以解决循环依赖吧。
bthulu
2022-07-24 12:13:02 +08:00
@unregister 有利个屁, 几十个依赖, 测某个方法用到其中一个依赖, 你一个个去数要塞到构造器第几个参数里么?

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

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

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

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

© 2021 V2EX