知识卡片
构造器注入优于字段注入
内容
Spring 支持构造器注入和字段/setter 注入两种方式,生产代码里推荐坚持用构造器注入而不是在字段上直接标注解自动装配。原因是构造器注入能保证依赖在对象构造完成的那一刻就已经是完全初始化好的、不可能是 null 的状态,天然引导你写出不可变对象(依赖字段可以是 final),也更容易在不启动 Spring 容器的情况下用普通 new 加 mock 依赖来测试这个类。字段注入则允许对象先被创建出来、依赖随后才被塞进去,这段”半初始化”的窗口期本身就是隐患的来源。发散:这本质上是把”对象必须处于合法状态”这个不变量从运行时检查(担心某个字段没被注入就是 null)挪到了编译期/构造期保证,是防御性编程里”让非法状态无法表示”这条原则的具体应用。
参考来源
《Cloud Native Spring in Action》第3章《Getting started with cloud native development》