1
bootvue 2022-07-23 12:51:54 +08:00
用构造方法注入吧 配合 lombok 写起来还省事
|
2
beginor 2022-07-23 13:06:41 +08:00 via Android
不推荐,建议使用构造函数注入
|
3
actar 2022-07-23 13:09:40 +08:00
构造器注入配合 lombok 的 @RequiredArgsConstructor 注解,挺省事的
|
4
chendy 2022-07-23 13:14:24 +08:00
依赖全部 private final
再来一个 lombok 的 RequiredArgsConstructor 完事 |
5
Akitora 2022-07-23 13:16:53 +08:00 via Android
构造注入+1
|
6
zed1018 2022-07-23 13:21:58 +08:00
service/component 构造注入,bean function 形参注入,可写可不写。
|
7
dcsuibian 2022-07-23 13:23:06 +08:00 1
|
8
fpure 2022-07-23 13:44:50 +08:00 1
我不管,我就要用 Autowired 注入
|
11
zjp 2022-07-23 14:09:10 +08:00
公司项目,经常一个 service 二三十个依赖项,还有循环依赖,不用字段注入会疯的...
|
15
vate32 2022-07-23 14:38:22 +08:00
表达的有问题吧,Autowired 就是用来注入的,但是可以用到字段、setter 方法、构造方法上,这些是有一些差别的
|
16
vate32 2022-07-23 14:39:09 +08:00
注入方式的问题,我之前就有提问过
https://v2ex.com/t/713586#reply27 |
17
wanguorui123 2022-07-23 14:46:23 +08:00
@Autowired 注入,@Scope("prototype") 创建实例
|
18
SpringChang 2022-07-23 14:49:49 +08:00
用 Spring 的话,@Autowired 很省事!
|
19
fkdog 2022-07-23 14:55:13 +08:00
旧项目的话,因为存在大量循环引用依赖,private final 构造器注入(配合 lombok )会出现错误,因此还是用 @Autowired 。
|
21
unregister 2022-07-23 15:24:38 +08:00
不建议使用,@Autowired Spring 不推荐,但是呢大家都在用。构造器有利于进行单元测试。
|
22
nosugar 2022-07-23 15:29:50 +08:00 via iPhone
项目中用的还是挺多的
|
23
savingrun 2022-07-23 15:49:26 +08:00
建议使用构造函数注入 +1
配合 lombok 的 @RequiredArgsConstructor 例子: @Service @RequiredArgsConstructor public class xxxxServiceImpl implements xxxAppService, xxxAdminService { private final xxxxDao dao; } |
24
Bingchunmoli 2022-07-23 16:50:24 +08:00 via Android
普通用构造函数,循环依赖用 autowired , 没有谁更好只有谁更适合
|
26
fpure 2022-07-23 17:11:16 +08:00 5
我不太理解,为什么有人愿意使用 Lombok 这种语法层侵入的库却排斥 Autowired
|
27
kkkiio 2022-07-23 17:30:11 +08:00
|
28
kkkiio 2022-07-23 17:32:40 +08:00
@kkkiio 用 Autowired 会遇到麻烦的最常见情景是单元测试,你要么暴露 Autowired 字段的 setter ,要么改成构造函数去初始化该字段
|
29
mind3x 2022-07-23 18:41:36 +08:00 2
看样子很多人不知道,单构造函数的类甚至不需要标注任何 `@Autowired`, Spring 默认就会从构造函数注入。
|
30
kaneg 2022-07-23 19:27:19 +08:00 via iPhone
的确知道应该使用构造方法而不是 Autowired ,但它就是顺手啊
|
31
ychost 2022-07-23 20:37:59 +08:00
很多时候需要 require = false 方便点
|
32
Oktfolio 2022-07-23 20:50:43 +08:00
我不用
|
34
Rumble66 2022-07-23 21:29:49 +08:00
构造器注入不能够像 Autowired 那样解决循环依赖
另外有一点, 为什么说循环依赖的代码是烂代码呢? AB 两个服务相互调用不是很常见的事情吗? |
35
wellerman 2022-07-24 01:07:18 +08:00
构造器注入+setter 注入,循环依赖都解决了。
|
36
Bingchunmoli 2022-07-24 01:13:22 +08:00 via Android
@mind3x 通常没有构造方法
|
38
11232as 2022-07-24 11:28:42 +08:00
构造器注入啊,写测试多舒服
|
40
bthulu 2022-07-24 12:13:02 +08:00
@unregister 有利个屁, 几十个依赖, 测某个方法用到其中一个依赖, 你一个个去数要塞到构造器第几个参数里么?
|
41
windyboy 2022-07-25 08:33:00 +08:00
最好在构造器注入
|
42
siweipancc 2022-07-25 09:01:35 +08:00 via iPhone
“最好”的选择在企业开发中往往崩,需求一个依赖一个的
|
43
jsdfzongkai 2022-07-25 09:12:41 +08:00
@dqzcwxb 确认是平替吗?知道两者区别不?
|
44
dqzcwxb 2022-07-25 09:39:00 +08:00
@jsdfzongkai #43
@Resource 可以根据 name 和 type 查找 bean 不需要额外支持 @Autowired 默认只支持 type,需要和 @Qualifie 一起使用才能支持 name 查找 这不是平替什么是平替?你说的区别又指哪个? |
45
nothingistrue 2022-07-25 09:50:39 +08:00
不使用字段上的 @Autowired 的唯一好处是,去掉 Spring 后你仍然可以手动注入。这在 Spring 几乎不可能被去掉的前提下,属于过度设计。而且还是很严重那种,因为替代方式都有问题:
隐式构造器依赖注入(就是说得 private final + @RequiredArgsConstructor )需要有强的团队约定否则就严重影响代码可读性。 构造器注入容易出问题,而且参数多了会影响可读性 Setter 注入器因为 lombok 尚不能很好的支持,没法用。 |
46
jsdfzongkai 2022-07-25 10:07:15 +08:00
@dqzcwxb 默认注入方式都不同 何来的平替
|
47
dqzcwxb 2022-07-25 10:48:06 +08:00
@jsdfzongkai #46
@Resource 会根据 name 查找,查找不到会按照 type 查找 @Autowired 只能根据 type 查找,查找不到需要手动加上 @Qualifie 指定 name Resource 从功能上是大于等于 Autowired,你要是觉得还是不一样 你干脆说名字不一样得了 |
48
dqzcwxb 2022-07-25 10:53:18 +08:00
@nothingistrue #45 如果存在不使用 spring 的场景,更推荐使用 Resource 这是 javax 注解
|
49
jsdfzongkai 2022-07-25 10:55:20 +08:00 1
@dqzcwxb 不想跟你杠,只是不想你误导大家,现在你自己说清楚差别了,省的有些同学看到你上面的回复以为真的是平替
|