在 Spring 中,提供了三种依赖注入(也被称之为 "对象注入","属性装配"等)的方式,这篇博客我们来分析一下这三种方式各有哪些优缺点。
一、属性注入
优点
简洁,使用方便。
缺点
▪ 只能用于 IoC 容器,如果是非 IoC 容器不可用,并且只有在使用的时候才会出现 NPE(空指
针异常);
▪ 不能注入⼀个 Final 修饰的属性。
二、构造函数注入
此方式推荐 Spring 4.X 进行使用
优点
▪ 可以注入 final 修饰的属性;
▪ 注入的对象不会被修改;
▪ 依赖对象在使用前,一定会被完全初始化,因为依赖是在类的构造方法中执行的,而构造方法
是在类加载阶段就会执行的方法;
▪ 通用性好, 构造方法是 JDK 支持的, 所以更换任何框架,他都是适用的。
缺点
▪ 注入多个对象时, 代码会比较繁琐。
三、Setter注入
此方式推荐 Spring 3.X进行使用
优点
方便在类实例之后, 重新对该对象进行配置或者注⼊
缺点
▪ 不能注入⼀个 Final 修饰的属性
▪ 注入对象可能会被改变, 因为 setter 方法可能会被多次调⽤, 就有被修改的风险。