Spring Boot 列出 Bean
最后修改于 2023 年 7 月 16 日
Spring Boot 列出 Bean 展示了如何列出存储在 Spring 容器中的所有 Bean,包括内置 Bean 和自定义 Bean。
Spring 是一个流行的 Java 应用框架,而 Spring Boot 是 Spring 的一个演进,它有助于以最小的努力创建独立的、生产级的基于 Spring 的应用程序。
核心 Spring 容器创建和管理 Bean。 可以通过 ApplicationContext
获取 Bean。 在以下应用程序中,我们列出所有已存储的 Bean。 该应用程序是一个命令行 Spring Boot 应用程序。
build.gradle ... src ├───main │ ├───java │ │ └───com │ │ └───zetcode │ │ │ Application.java │ │ │ MyRunner.java │ │ └───bean │ │ MyBean.java │ └───resources └───test ├───java └───resources
这是 Spring Boot 应用程序的项目结构。
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' }
这是 Gradle 构建文件。 spring-boot-starter
是核心启动器,包括自动配置支持、日志记录和 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; } }
MyBean
是一个自定义 Bean,由 Spring 创建和管理。 由 @Component
注解修饰的类会被 Spring 自动检测并存储在 Spring 容器中。
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); } } }
CommandLineRunner
接口指示当 Bean 包含在 SpringApplication
中时应该运行。 它可以用于创建 Spring Boot 命令行应用程序。
@Component public class MyRunner implements CommandLineRunner {
MyRunner
也是一个 Spring Bean,并且被列在 Bean 之中。
public MyRunner(ApplicationContext appContext, MyBean myBean) { this.appContext = appContext; this.myBean = myBean; }
ApplicationContext
和自定义的 MyBean
通过构造函数注入到字段中。
System.out.println(myBean.getMessage());
在这里,我们打印存储在自定义 Bean 中的消息。
String[] beans = appContext.getBeanDefinitionNames();
从应用程序上下文,我们使用 getBeanDefinitionNames
获取 Bean 名称的数组。
for (String bean : beans) { System.out.println(bean); }
Bean 的名称被打印到控制台。
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); } }
在 Application
中,设置 Spring Boot 应用程序。 设置 Spring Boot 应用程序。 @SpringBootApplication
启用自动配置和组件扫描。 Spring 将自动扫描 Bean,并将同时选取 MyBean
和 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 ...
我们运行应用程序。 -q
选项关闭 Gradle 消息。
在本文中,我们列出了存储在 Spring 容器中的所有 Bean。
作者
列出 Spring Boot 教程。