在Spring中使用构造函数注入时,可以安全地假设所有传递的bean都已完全初始化吗?
换句话说,使用“经典” @PostConstruct
机制时,是否可以在构造函数中执行与用@Autowired
注释的方法相同的操作?还是有可能在调用构造函数之后对传递的bean执行一些后处理?
答案 0 :(得分:1)
可以安全地假定初始化为构造函数参数的所有依赖项。其他依赖项则没有。
答案 1 :(得分:0)
使用@PostConstruct
的全部要点是,当您使用setter依赖注入时,构造函数无法用于完全初始化对象,并且在调用所有setter方法之后需要执行一些初始化( (因为需要注入依赖项)。请注意,注释@PostConstruct
在Java 11中已完全删除,并且需要添加依赖项javax.annotation-api
才能起作用。此外,@ PostConstruct只能注释为一种方法在一个类中,它将在Bean生命周期中仅执行一次。
但是通过使用构造函数注入,我们从本质上解决了在调用构造函数时尚未注入的所有依赖项的问题。因此,如果您使用构造函数注入,则可能无法使用@PostContruct
。
参考:https://docs.oracle.com/javaee/7/api/javax/annotation/PostConstruct.html