Lab 3: Run on Application Startup
Goals¶
- Learn about how to run code at startup with the
CommandLineRunner
- Explore the contents of Spring's
ApplicationContext
a. Application Started¶
Create a new class named Startup
, annotate the class with @Component
, and have it implement the CommandLineRunner
interface (you'll need to import org.springframework.boot.CommandLineRunner
).
This will require you to implement a run
method, which you can do like this:
@Override public void run(String... args) throws Exception { System.out.println("CommandLineRunner has started..."); }
Run the application and look for when the CommandLineRunner has started... string is displayed.
b. ApplicationContext Contents¶
Stop the application.
Remove the run
method from above and replace it with the following:
private final ApplicationContext applicationContext; public Startup(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } @Override public void run(String... args) throws Exception { BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) this.applicationContext; String[] beans = applicationContext.getBeanDefinitionNames(); Arrays.sort(beans); for (String bean : beans) { System.out.println("Bean name: " + bean); BeanDefinition beanDefinition = beanDefinitionRegistry.getBeanDefinition(bean); if (beanDefinition.getBeanClassName() != null) { if (beanDefinition.getBeanClassName().startsWith("com.welltestedlearning")) { System.out.println(" --> Class name: " + beanDefinition.getBeanClassName() + ", scope: " + beanDefinition.getScope()); } } } }
In the output, you'll see all of the Beans registered in the Spring ApplicationContext
container. For those classes that are part of this project, the full classname is displayed.
c. Clean up¶
Once you're done exploring the output, you can delete this Startup
class, or remove the @Component
annotation, so that it doesn't slow down the startup of our application.
References¶
CommandLineRunner
For more details, consult the Spring Boot documentation: https://docs.spring.io/spring-boot/docs/2.4.5/reference/htmlsingle/#boot-features-command-line-runner