Spring Frameworkを使用して開発をしていると、XMLでbean定義しているはずなのに[No qualifying bean of type]とか[beanが定義されていません]のようなエラーが出てはまるときがある。
そんなときは本当にSpringのコンテキストにbeanが登録されているかどうか、beanの一覧が見たくなる。
早速サンプルを紹介する。
まずはフォルダ構成から。
次に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徹底入門 Spring FrameworkによるJavaアプリケーション開発
- 作者: 株式会社NTTデータ
- 出版社/メーカー: 翔泳社
- 発売日: 2016/07/21
- メディア: 大型本
- この商品を含むブログ (1件) を見る
[改訂新版]Spring入門 ――Javaフレームワーク・より良い設計とアーキテクチャ
- 作者: 長谷川裕一,大野渉,土岐孝平
- 出版社/メーカー: 技術評論社
- 発売日: 2016/06/14
- メディア: Kindle版
- この商品を含むブログを見る