有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当使用Spring的构造函数注入时,java bean是否在构造函数中完全初始化?

在使用Spring的构造函数注入时,是否可以安全地假设所有传递的bean都已完全初始化

换句话说,当使用“classic”@Autowired机制时,是否可以在构造函数中执行与使用@PostConstruct注释的方法相同的操作?或者在调用构造函数之后,是否可能对传递的bean执行一些后处理


共 (2) 个答案

  1. # 1 楼答案

    使用@PostConstruct的要点是,当您使用setter依赖项注入时,构造函数不能用于完全初始化对象,需要在调用所有setter方法后执行一些初始化(因为需要注入依赖项)。请注意,注释@PostConstruct在Java11中被完全删除,需要添加依赖项javax.annotation-api才能工作。此外,@PostConstruct在一个类中只能被注释为一个方法,并且在bean生命周期中只执行一次

    但是通过使用构造函数注入,我们基本上解决了调用构造函数时所有依赖项尚未注入的问题。因此,如果您使用的是构造函数注入,则可能无法使用@PostContruct

    参考:https://docs.oracle.com/javaee/7/api/javax/annotation/PostConstruct.html

  2. # 2 楼答案

    可以安全地假设所有指定为构造函数参数的依赖项都已初始化。其他依赖项则不是