前の記事でSpringのXMLコンフィグを用いてクラスをSpringコンテナに登録するサンプルを紹介した。
今回は、それをアノテーションコンフィグに直してみる。
フォルダ構成
次のようなフォルダ構成を前提としている。
前回使ったサンプルのソース
前回使ったサンプルのソースを再掲する。
本題とはあまり関係がないがpom.xml
<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>org.springframework.samples</groupId> <artifactId>Sample</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <!-- Generic properties --> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- Spring --> <spring-framework.version>4.3.2.RELEASE</spring-framework.version> </properties> <dependencies> <!-- Spring and Transactions --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-framework.version}</version> </dependency> </dependencies> </project>
続いてMainクラス
package org.yyama; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String... args) { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); Main tMain = ctx.getBean(Main.class); tMain.proc(); ctx.close(); } public void proc() { System.out.println("procの中"); } }
最後にapplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="org.yyama.Main" /> </beans>
修正後のソース
applicationContext.xmlとMainクラスの2本を修正する。
まず、Mainクラスだが、クラス宣言の前に[@Component]を追加するだけ。当然、[import org.springframework.stereotype.Component]の記載も必要になるので、厳密には2行追加する。
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"); Main tMain = ctx.getBean(Main.class); tMain.proc(); ctx.close(); } public void proc() { System.out.println("procの中"); } }
そしてapplicationContext.xml。[bean]タグの変わりに、[context:component-scan]タグを使用するのと、contextスキーマを宣言する。
<?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>
実行
実行すると前回同様、"procの中"という文字列が出力される。
8 09, 2016 2:49:15 午後 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 情報: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4d405ef7: startup date [Tue Aug 09 14:49:15 JST 2016]; root of context hierarchy 8 09, 2016 2:49:15 午後 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 情報: Loading XML bean definitions from class path resource [applicationContext.xml] procの中 8 09, 2016 2:49:15 午後 org.springframework.context.support.ClassPathXmlApplicationContext doClose 情報: Closing org.springframework.context.support.ClassPathXmlApplicationContext@4d405ef7: startup date [Tue Aug 09 14:49:15 JST 2016]; root of context hierarchy
まとめ
<context:component-scan base-package="org.yyama" />
この記載で、org.yyamaパッケージ配下で@Componentがついているクラスを自動でコンテキストに登録してくれる。
前回学習した、XMLコンフィグの問題点として容易に想像できるのが、アプリケーションが大きくなったらXMLファイルもどんどん大きくなって、Struts時代のXML地獄に逆戻りになってしまうことだ。
その問題を解消するのが、アノテーションコンフィグであり、先ほどの1文でパッケージ配下のクラスをすべてコンテキストに登録してくれるので、クラス数が増えても、XMLの記述量を増やす必要がなくなる。
今日はここまで。
Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
- 作者: 株式会社NTTデータ
- 出版社/メーカー: 翔泳社
- 発売日: 2016/07/21
- メディア: 大型本
- この商品を含むブログ (1件) を見る
[改訂新版]Spring入門 ――Javaフレームワーク・より良い設計とアーキテクチャ
- 作者: 長谷川裕一,大野渉,土岐孝平
- 出版社/メーカー: 技術評論社
- 発売日: 2016/06/14
- メディア: Kindle版
- この商品を含むブログを見る