在本教程中,我们列出了存储在 Spring 容器中的所有 bean,包括内置和自定义 bean。
Spring 是流行的 Java 应用框架,而 Spring Boot 是 Spring 的演进,可帮助您以最少的精力创建独立的,生产级的基于 Spring 的应用。
Spring 核心容器创建并管理 Bean。 可以通过ApplicationContext获得这些 bean。 在以下应用中,我们列出了所有存储的 bean。 该应用是命令行 Spring Boot 应用。
$ tree.├── pom.xml└── src├── main│ ├── java│ │ └── com│ │ └── zetcode│ │ ├── Application.java│ │ ├── bean│ │ │ └── MyBean.java│ │ └── MyRunner.java│ └── resources└── test└── java
这是 Spring Boot 应用的项目结构。
pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zetcode</groupId><artifactId>SpringBootListBeans</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.3.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><name>SpringBootListBeans</name></project>
这是 Maven 构建文件。 spring-boot-starter是包括自动配置支持,日志记录和 YAML 在内的核心启动器。 该应用打包到一个 JAR 文件中。
MyBean.java
package com.zetcode.bean;import org.springframework.stereotype.Component;@Componentpublic class MyBean {private final String message = "This is MyBean";public String getMessage() {return message;}}
MyBean是由 Spring 创建和管理的自定义 bean。 Spring 自动检测由@Component注解修饰的类,并将其存储在 Spring 容器中。
MyRunner.java
package com.zetcode;import com.zetcode.bean.MyBean;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Component;@Componentpublic class MyRunner implements CommandLineRunner {@Autowiredprivate ApplicationContext appContext;@Autowiredprivate MyBean myBean;@Overridepublic 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接口指示当SpringApplication中包含 bean 时应运行它。 它可以用来创建 Spring Boot 命令行应用。
@Componentpublic class MyRunner implements CommandLineRunner {
MyRunner也是一个 Spring bean,并在 bean 中列出。
@Autowiredprivate ApplicationContext appContext;
ApplicationContext将以@Autowired注解注入到字段中。
@Autowiredprivate MyBean myBean;
同样,我们注入自定义 bean。
System.out.println(myBean.getMessage());
在这里,我们打印存储在自定义 bean 中的消息。
String[] beans = appContext.getBeanDefinitionNames();
从应用上下文中,我们获得一个带有getBeanDefinitionNames()的 bean 名称数组。
for (String bean : beans) {System.out.println(bean);}
Bean 名称将打印到控制台。
Application.java
package com.zetcode;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
在Application中,设置 Spring Boot 应用。 设置 Spring Boot 应用。 @SpringBootApplication启用自动配置和组件扫描。 Spring 将自动扫描 Bean,并同时拾取MyBean和MyRunner。
$ mvn spring-boot:run -q...This is MyBeanList of beans:org.springframework.context.annotation.internalConfigurationAnnotationProcessororg.springframework.context.annotation.internalAutowiredAnnotationProcessororg.springframework.context.annotation.internalRequiredAnnotationProcessororg.springframework.context.annotation.internalCommonAnnotationProcessororg.springframework.context.event.internalEventListenerProcessororg.springframework.context.event.internalEventListenerFactoryapplicationorg.springframework.boot.autoconfigure.internalCachingMetadataReaderFactorymyRunnermyBean...
我们运行该应用。 -q Maven 选项关闭 Maven 消息。
在本教程中,我们列出了存储在 Spring 容器中的所有 bean。 您可能也对相关教程感兴趣: Spring Boot Bean , Spring Boot @Qualifier注解,在 Spring Boot 中提供静态内容, Spring Boot DataSourceBuilder教程, Spring Boot iText 教程, Java 教程。
