Spring Boot listing beans
last modified July 16, 2023
Spring Boot listing beans shows how to list all beans stored in the Spring container, including built-in and custom beans.
Spring is a popular Java application framework and Spring Boot is an evolution of Spring which helps create stand-alone, production-grade Spring based applications with minimal effort.
The core Spring containter creates and manages beans. The beans are available
throught ApplicationContext
.
In the following application, we list all stored beans.
The application is command line Spring Boot application.
build.gradle ... src ├───main │ ├───java │ │ └───com │ │ └───zetcode │ │ │ Application.java │ │ │ MyRunner.java │ │ └───bean │ │ MyBean.java │ └───resources └───test ├───java └───resources
This is the project structure of the Spring Boot application.
plugins { id 'org.springframework.boot' version '3.1.1' id 'io.spring.dependency-management' version '1.1.0' id 'java' } group = 'com.zetcode' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' }
This is the Gradle build file. The spring-boot-starter
is the core
starter that includes auto-configuration support, logging, and YAML.
package com.zetcode.bean; import org.springframework.stereotype.Component; @Component public class MyBean { private final String message = "This is MyBean"; public String getMessage() { return message; } }
The MyBean
is a custom bean that is created and managed by Spring.
Classes decorated by @Component
annotation are auto-detected by
Spring and stored in Spring container.
package com.zetcode; import com.zetcode.bean.MyBean; import org.springframework.boot.CommandLineRunner; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; @Component public class MyRunner implements CommandLineRunner { private final ApplicationContext appContext; private final MyBean myBean; public MyRunner(ApplicationContext appContext, MyBean myBean) { this.appContext = appContext; this.myBean = myBean; } @Override public void run(String... args) throws Exception { System.out.println(myBean.getMessage()); System.out.println("List of beans:"); String[] beans = appContext.getBeanDefinitionNames(); for (String bean : beans) { System.out.println(bean); } } }
The CommandLineRunner
interface indicates that a bean
should run when it is contained within a SpringApplication
.
It can be used to create Spring Boot command line applications.
@Component public class MyRunner implements CommandLineRunner {
MyRunner
is a Spring bean as well and is listed among the beans.
public MyRunner(ApplicationContext appContext, MyBean myBean) { this.appContext = appContext; this.myBean = myBean; }
The ApplicationContext
and the custom MyBean
are
injected into the fields in constructor injection.
System.out.println(myBean.getMessage());
Here we print the message stored in our custom bean.
String[] beans = appContext.getBeanDefinitionNames();
From the application context, we get an array of bean names with the
getBeanDefinitionNames
.
for (String bean : beans) { System.out.println(bean); }
The bean names are printed to the console.
package com.zetcode; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
In the Application
, set up the Spring Boot application. The
set up the Spring Boot application. The @SpringBootApplication
enables auto-configuration and component scanning. Spring will automatically
scan for beans and will pick up both MyBean
and MyRunner
.
$ ./gradlew -q bootRun ... This is MyBean List of beans: org.springframework.context.annotation.internalConfigurationAnnotationProcessor org.springframework.context.annotation.internalAutowiredAnnotationProcessor org.springframework.context.annotation.internalCommonAnnotationProcessor org.springframework.context.event.internalEventListenerProcessor org.springframework.context.event.internalEventListenerFactory application org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory myRunner myBean ...
We run the application. The -q
option turns off Gradle messages.
In this article we have listed all beans stored in a Spring container.
Author
List Spring Boot tutorials.