当使用Spring的构造函数注入时,java bean是否在构造函数中完全初始化?
在使用Spring的构造函数注入时,是否可以安全地假设所有传递的bean都已完全初始化
换句话说,当使用“classic”@Autowired
机制时,是否可以在构造函数中执行与使用@PostConstruct
注释的方法相同的操作?或者在调用构造函数之后,是否可能对传递的bean执行一些后处理
你可以在下面搜索框中键入要查询的问题!
在使用Spring的构造函数注入时,是否可以安全地假设所有传递的bean都已完全初始化
换句话说,当使用“classic”@Autowired
机制时,是否可以在构造函数中执行与使用@PostConstruct
注释的方法相同的操作?或者在调用构造函数之后,是否可能对传递的bean执行一些后处理
# 1 楼答案
使用
@PostConstruct
的要点是,当您使用setter依赖项注入时,构造函数不能用于完全初始化对象,需要在调用所有setter方法后执行一些初始化(因为需要注入依赖项)。请注意,注释@PostConstruct
在Java11中被完全删除,需要添加依赖项javax.annotation-api
才能工作。此外,@PostConstruct在一个类中只能被注释为一个方法,并且在bean生命周期中只执行一次但是通过使用构造函数注入,我们基本上解决了调用构造函数时所有依赖项尚未注入的问题。因此,如果您使用的是构造函数注入,则可能无法使用
@PostContruct
参考:https://docs.oracle.com/javaee/7/api/javax/annotation/PostConstruct.html
# 2 楼答案
可以安全地假设所有指定为构造函数参数的依赖项都已初始化。其他依赖项则不是