Spring, by default, manages beans’ lifecycle and arranges their initialization order.
But, we can still customize it based on our needs. We can choose either the SmartLifeCycle interface or the @DependsOn annotation for managing initialization order.
@Configuration @ComponentScan("com.baeldung.dependson") public class Config { @Bean @DependsOn({"fileReader","fileWriter"}) public FileProcessor fileProcessor(){ return new FileProcessor(); } @Bean("fileReader") public FileReader fileReader() { return new FileReader(); } @Bean("fileWriter") public FileWriter fileWriter() { return new FileWriter(); } }
Finally, there are few points which we should take care of while using @DependsOn annotation:
- While using @DependsOn, we must use component-scanning
- If a DependsOn-annotated class is declared via XML, DependsOn annotation metadata is ignored
DependsOnDatabaseInitialization Annotation
Indicate that a bean’s creation and initialization depends upon database initialization having completed. May be used on a bean’s class or its @Bean definition.
References
https://www.baeldung.com/spring-depends-on