This May Come late But
I will start by mentioning three facts about spring beans life cycle that comes after loading the bean definition.
Beans are instanciated : shortly this basically means that the bean factory is calling the constructor of each bean .
Dependencies are injected : this occurs only if autowiring is done on setters or fields, we inject dependencies.
Initialization : this is the fuzzy place, shortly using @PostConstruct is the initialization phase, this will call the annotated method to initialize the state of the bean. In depth:
@PostConstruct is picked up by enabling component scanning and called by a pre-init bean named internalCommonAnnotationProcessor of a type that implements the BeanPostProcessor interface named CommonAnnotationBeanPostProcessor. Classes implementing this interface are factory hooks that allow for modifications of bean instances. The application context autodetects these types of beans and instantiates them before any other beans in the container, since after their instantiation they are used to manipulate other beans managed by the IoC container.
The BeanPostProcessor interface declares two methods to be implemented, which have been declared as default interface methods so that the developer can freely implement only the one that presents interest. The methods are named postProcessBeforeInitialization and postProcessAfterInitialization .
Typically, post processors that populate bean properties pick up methods annotated with @PostConstruct implement postProcessBeforeInitialization, while post processors that wrap beans with proxies will normally implement postProcessAfterInitialization.
source of knowledge : pivotal-certified-professional-spring-5 book on oreilly.
So My personal answer is
Constructor is about instanciation,
initialization comes always after DI is done (constructor, setter or field).