# Spring Boot 列出 bean

> 原文： [http://zetcode.com/articles/springbootlistbeans/](http://zetcode.com/articles/springbootlistbeans/)

在本教程中，我们列出了存储在 Spring 容器中的所有 bean，包括内置和自定义 bean。

Spring 是流行的 Java 应用框架，而 Spring Boot 是 Spring 的演进，可帮助您以最少的精力创建独立的，生产级的基于 Spring 的应用。

Spring 核心容器创建并管理 Bean。 可以通过`ApplicationContext`获得这些 bean。 在以下应用中，我们列出了所有存储的 bean。 该应用是命令行 Spring Boot 应用。

```java
$ tree
.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── zetcode
    │   │           ├── Application.java
    │   │           ├── bean
    │   │           │   └── MyBean.java
    │   │           └── MyRunner.java
    │   └── resources
    └── test
        └── java

```

这是 Spring Boot 应用的项目结构。

`pom.xml`

```java
<?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.0 
http://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`

```java
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`是由 Spring 创建和管理的自定义 bean。 Spring 自动检测由`@Component`注解修饰的类，并将其存储在 Spring 容器中。

`MyRunner.java`

```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;

@Component
public class MyRunner implements CommandLineRunner {

    @Autowired
    private ApplicationContext appContext;

    @Autowired
    private 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`接口指示当`SpringApplication`中包含 bean 时应运行它。 它可以用来创建 Spring Boot 命令行应用。

```java
@Component
public class MyRunner implements CommandLineRunner {

```

`MyRunner`也是一个 Spring bean，并在 bean 中列出。

```java
@Autowired
private ApplicationContext appContext;

```

`ApplicationContext`将以`@Autowired`注解注入到字段中。

```java
@Autowired
private MyBean myBean;

```

同样，我们注入自定义 bean。

```java
System.out.println(myBean.getMessage());

```

在这里，我们打印存储在自定义 bean 中的消息。

```java
String[] beans = appContext.getBeanDefinitionNames();

```

从应用上下文中，我们获得一个带有`getBeanDefinitionNames()`的 bean 名称数组。

```java
for (String bean : beans) {
    System.out.println(bean);
}

```

Bean 名称将打印到控制台。

`Application.java`

```java
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`。

```java
$ mvn spring-boot:run -q
...
This is MyBean
List of beans:
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
application
org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory
myRunner
myBean
...

```

我们运行该应用。 `-q` Maven 选项关闭 Maven 消息。

在本教程中，我们列出了存储在 Spring 容器中的所有 bean。 您可能也对相关教程感兴趣： [Spring Boot Bean](/articles/springbootbean/) ， [Spring Boot `@Qualifier`注解](/articles/springbootqualifier/)，[在 Spring Boot 中提供静态内容](/springboot/static/)， [Spring Boot `DataSourceBuilder`教程](/springboot/datasourcebuilder/)， [Spring Boot iText 教程](/articles/springbootitext/)， [Java 教程](/lang/java/)。