すべてのSpring管理のBeanを取得する方法

1概要

この記事では、すべてのSpring管理Beanをコンテナー内に表示するためのさまざまな手法を探ります。

2 IoCコンテナ

BeanはSpring管理のアプリケーションの基盤です。すべての豆は、それらのライフサイクルを管理する責任があるIOCコンテナー内にあります。

このコンテナ内のすべてのBeanのリストを取得する方法は2つあります。

  1. ListableBeanFactory インタフェースを使用する

  2. スプリングブートアクチュエータを使用する

3 ListableBeanFactory インタフェースを使用する

  • ListableBeanFactory インタフェースは、このファクトリで定義されているすべてのBeanの名前を返す getBeanDefinitionNames() メソッドを提供します。このインタフェースは、すべてのBeanインスタンスを列挙するためにそれらのBean定義を事前ロードするすべてのBeanファクトリによって実装されます。

公式文書 に、すべての既知のサブインターフェースとその実装クラスのリストがあります。 。

この例では、Spring Bootアプリケーションを使用します。

まず、Spring Beanをいくつか作成します。簡単なSpringコントローラ FooController を作成しましょう。

@Controller
public class FooController {

    @Autowired
    private FooService fooService;

    @RequestMapping(value="/displayallbeans")
    public String getHeaderAndBody(Map model){
        model.put("header", fooService.getHeader());
        model.put("message", fooService.getBody());
        return "displayallbeans";
    }
}

このコントローラは別のSpring Bean FooService に依存しています。

@Service
public class FooService {

    public String getHeader() {
        return "Display All Beans";
    }

    public String getBody() {
        return "This is a sample application that displays all beans "
          + "in Spring IoC container using ListableBeanFactory interface "
          + "and Spring Boot Actuators.";
    }
}

ここでは2つの異なるBeanを作成しました。

  1. fooController

  2. fooService

このアプリケーションの実行中に、 applicationContext オブジェクトを使用し、その getBeanDefinitionNames() メソッドを呼び出します。

@SpringBootApplication
public class Application {
    private static ApplicationContext applicationContext;

    public static void main(String[]args) {
        applicationContext = SpringApplication.run(Application.class, args);
        displayAllBeans();
    }

    public static void displayAllBeans() {
        String[]allBeanNames = applicationContext.getBeanDefinitionNames();
        for(String beanName : allBeanNames) {
            System.out.println(beanName);
        }
    }
}

これは applicationContext containerからのすべてのbeanを表示します。

fooController
fooService//other beans

私たちが定義したBeanと共に、このコンテナにある他のすべてのBeanもログに記録します。わかりやすくするために、ここには省略してあります。かなり多数あるからです。

4 Spring Boot Actuator を使う

Spring Boot Actuator機能は、アプリケーションの統計を監視するために使用されるエンドポイントを提供します。

これには/__beansを含む多数の組み込みエンドポイントが含まれます。これにより、アプリケーション内のすべてのSpring管理対象Beanの完全なリストが表示されます。既存のエンドポイントの完全なリストはhttp://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-endpoints[公式文書]にあります。

さて、URLにアクセスしてみましょう。これにより、Spring IoCコンテナ内のすべてのBeanが表示された JSON 応答が返されます。

----[    {
        "context": "application:8080",
        "parent": null,
        "beans":[            {
                "bean": "fooController",
                "aliases":[],
                "scope": "singleton",
                "type": "com.baeldung.displayallbeans.controller.FooController",
                "resource": "file[E:/Workspace/tutorials-master/spring-boot/target
                 /classes/com/baeldung/displayallbeans/controller/FooController.class]",
                "dependencies":[                    "fooService"
               ]            },
            {
                "bean": "fooService",
                "aliases":[],
                "scope": "singleton",
                "type": "com.baeldung.displayallbeans.service.FooService",
                "resource": "file[E:/Workspace/tutorials-master/spring-boot/target/                  classes/com/baeldung/displayallbeans/service/FooService.class]",
                "dependencies":[]            },
           //...other beans
       ]    }]----

もちろん、これも同じスプリングコンテナにある他の多くのBeanで構成されていますが、わかりやすくするために、ここでは省略しています。

Spring Boot Actuatorsについてもっと知りたいなら、メインリンク:/spring-boot-actuators[Spring Boot Actuator]ガイドに進んでください。

5結論

この記事では、 ListableBeanFactory インターフェースとSpring Boot Actuatorsを使って Spring IoC Container 内のすべてのBeanを表示する方法について学びました。

このチュートリアルの 完全な実装 を見つけることができます over on Github。