使用构造器注入的好处

1,606 阅读1分钟

在平时基于Spring的开发中,最常用的注入方式就是利用@Autowired@Resource进行field注入,但是Spring官方推荐的注入方式是构造器注入,本文记录一下使用构造器注入的方式及带来的益处。

1 使用方式

@Controller
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }
}

2 益处

2.1 保证依赖不可变

注入对象声明为final,保证不可变

2.2 保证依赖不为空

不用担心程序启动正常,但是使用过程中因注入对象为空而导致的异常。无法注入时会在启动阶段就直接暴露。

2.3 循环依赖

很多说法是通过构造器注入的方式能够避免循环依赖,但是我对这种说法不甚赞同。循环依赖并不是缺陷,而是一种特殊的依赖形式,所以“避免循环依赖”在我看来并不能被称为是优点。 Spring通过三级缓存的方式直接在让用户无感的前提下,解决了setter注入以及filed注入方式下的循环依赖,但是并没有直接处理构造器注入这种方式,我们可以通过@Lazy注解让构造器方式兼容循环依赖。

2.4 提升了代码的可复用性

非IOC容器环境可使用new实例化该类的对象