Skip to content

Lab 3: Run on Application Startup

Goals

  • Learn about how to run code at startup with the CommandLineRunner
  • Explore the Spring ApplicationContext

a. Application Started

Create a new class Startup, annotate it with @Component, and have it implement the CommandLineRunner interface (you'll 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("Application started...");
}

Run the application and look for when the Application started... string is displayed.

b. ApplicationContext Contents

Remove the run method from above and add the following:

@Autowired
private 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.tedmyoung")) {
        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.