山崎屋の技術メモ

IT業界で働く中でテクノロジーを愛するSIerのシステムエンジニア👨‍💻 | AndroidとWebアプリの二刀流🧙‍♂️ | コードの裏にあるストーリーを綴るブログ執筆者✍️ | 日々進化するデジタル世界で学び続ける探究者🚀 | #TechLover #CodeArtisan、気になること、メモしておきたいことを書いていきます。

【Spring Framework】 登録されているBeanの一覧を表示

Spring Frameworkを使用して開発をしていると、XMLでbean定義しているはずなのに[No qualifying bean of type]とか[beanが定義されていません]のようなエラーが出てはまるときがある。

そんなときは本当にSpringのコンテキストにbeanが登録されているかどうか、beanの一覧が見たくなる。

早速サンプルを紹介する。

まずはフォルダ構成から。
f:id:yyama1556:20160809140317p:plain

次にapplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd">
	<context:component-scan base-package="org.yyama" />
</beans>

そしてMainクラス。

package org.yyama;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class Main {
	public static void main(String... args) {
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		String[] strArr = ctx.getBeanDefinitionNames();
		for (String string : strArr) {
			System.out.println(string);
		}
		ctx.close();
	}
}

実行すると次のような出力を得られる。

8 09, 2016 3:40:01 午後 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
情報: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4d405ef7: startup date [Tue Aug 09 15:40:01 JST 2016]; root of context hierarchy
8 09, 2016 3:40:01 午後 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
情報: Loading XML bean definitions from class path resource [applicationContext.xml]
main
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
org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor
org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor
8 09, 2016 3:40:01 午後 org.springframework.context.support.ClassPathXmlApplicationContext doClose
情報: Closing org.springframework.context.support.ClassPathXmlApplicationContext@4d405ef7: startup date [Tue Aug 09 15:40:01 JST 2016]; root of context hierarchy

Mainクラスがbean名[main]として登録されていることが確認できる。その他はspringを起動すると登録されるデフォルトのbeanだろう。

まとめ

ctx.getBeanDefinitionNames()

コンテキストの[getBeanDefinitionNames]でSpringに管理されているbeanの一覧がString配列で取得できることを覚えておきたい。


Spring 関連記事へのリンク集つくりました。