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

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

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

6305 次点击
所在节点    程序员
50 条回复
windyboy
2022-07-25 08:33:00 +08:00
最好在构造器注入
siweipancc
2022-07-25 09:01:35 +08:00
“最好”的选择在企业开发中往往崩,需求一个依赖一个的
jsdfzongkai
2022-07-25 09:12:41 +08:00
@dqzcwxb 确认是平替吗?知道两者区别不?
dqzcwxb
2022-07-25 09:39:00 +08:00
@jsdfzongkai #43
@Resource 可以根据 name 和 type 查找 bean 不需要额外支持
@Autowired 默认只支持 type,需要和 @Qualifie 一起使用才能支持 name 查找
这不是平替什么是平替?你说的区别又指哪个?
nothingistrue
2022-07-25 09:50:39 +08:00
不使用字段上的 @Autowired 的唯一好处是,去掉 Spring 后你仍然可以手动注入。这在 Spring 几乎不可能被去掉的前提下,属于过度设计。而且还是很严重那种,因为替代方式都有问题:
隐式构造器依赖注入(就是说得 private final + @RequiredArgsConstructor )需要有强的团队约定否则就严重影响代码可读性。
构造器注入容易出问题,而且参数多了会影响可读性
Setter 注入器因为 lombok 尚不能很好的支持,没法用。
jsdfzongkai
2022-07-25 10:07:15 +08:00
@dqzcwxb 默认注入方式都不同 何来的平替
dqzcwxb
2022-07-25 10:48:06 +08:00
@jsdfzongkai #46
@Resource 会根据 name 查找,查找不到会按照 type 查找
@Autowired 只能根据 type 查找,查找不到需要手动加上 @Qualifie 指定 name
Resource 从功能上是大于等于 Autowired,你要是觉得还是不一样
你干脆说名字不一样得了
dqzcwxb
2022-07-25 10:53:18 +08:00
@nothingistrue #45 如果存在不使用 spring 的场景,更推荐使用 Resource 这是 javax 注解
jsdfzongkai
2022-07-25 10:55:20 +08:00
@dqzcwxb 不想跟你杠,只是不想你误导大家,现在你自己说清楚差别了,省的有些同学看到你上面的回复以为真的是平替
NeoZephyr
2022-07-25 11:25:43 +08:00
@beginor 容易循环依赖

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

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

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

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

© 2021 V2EX