こんにちは、鈴木です。
ここしばらく Ruby/Rails ばかりだったので、すっかり Java 事情に疎くなってしまいました。
ということで Maven3 と Spring4 で Hello, World やります!
Spring って最新は 3 では?と思った方もいらっしゃるかも知れません。僕も「最新は Spring3 だったかなー」と思っていたのですが、2013/12/12 に 4.0.0 がリリースされています。(see Announcing Spring Framework 4.0 GA Release )
ということで Spring4 で Hello, World やります!
あと、Maven も使います。Maven の最新バージョンは 3.1.1 ですね。依存ライブラリの管理には Ivy や Gradle も選択肢としてあるのですが、最近の主流はどれなんでしょうか。「これいいよー」などありましたら教えてくださいな。
Maven のインストール
Maven は以下のサイトでダウンロードできます。
ダウンロードして展開してパスを通せば準備 OK です。
プロジェクトを作る
Maven でプロジェクトを作ります。
1 |
mvn archetype:create -DgroupId=com.example.spring4.hello -DartifactId=hello |
実行すると hello というディレクトリが作成されます。
pom.xml に Spring4 を追加する
まずは pom.xml を以下のように編集しましょう。
コメントで「追加 - ここから」と「追加 - ここまで」と書いた範囲を追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<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.example.spring4</groupId> <artifactId>hello</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>hello</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- 追加 - ここから --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.0.RELEASE</version> </dependency> <!-- 追加 - ここまで --> </dependencies> </project> |
HelloService インタフェースを作る
HelloService というインタフェースを作成します。(src/com/example/spring4/hello/HelloService.java)
1 2 3 4 5 6 7 |
package com.example.spring4.hello; public interface HelloService { public String getMessage(); } |
実装クラスの getMessage() で「Hello, World!」と返す予定です。
HelloServiceImpl クラスを作る
次に HelloService の実装クラスを作ります。(src/com/example/spring4/hello/HelloServiceImpl.java)
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.example.spring4.hello; import org.springframework.stereotype.Component; @Component public class HelloServiceImpl implements HelloService { public String getMessage() { return "Hello, World!"; } } |
getMessage() で「Hello, World!」と返すように実装しました。
@Component を付けておくと Spring コンテナによってコンポーネントとして自動検出されるようになります。つまり、DI したい実装クラスには @Component を付けるということです。
HelloWorldPrinter を作る
次は HelloService を使ってメッセージを表示する HelloWorldPrinter クラスを作ります。(src/com/example/spring4/hello/HelloWorldPrinter.java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com.example.spring4.hello; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class HelloWorldPrinter { @Autowired private HelloService helloService; public void run() { System.out.println(helloService.getMessage()); } } |
HelloWorldPrinter 自身も Spring コンテナに登録するので @Component を付けています。helloService フィールドに @Autowired を付けていますが、これは Spring コンテナから型の合うコンポーネントを自動的に DI してもらうためのものです。
run() メソッドでは helloService#getMessage() の結果を単純に出力しています。
App クラスを作る
最後に動作確認用のコードを書きます。(src/com/example/spring4/hello/App.java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com.example.spring4.hello; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan public class App { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(App.class); context.getBean(HelloWorldPrinter.class).run(); } } |
AnnotationConfigApplicationContext を new して、それから取り出した HelloWorldPrinter の run() メソッドを呼び出しています。
App クラスに付けているアノテーションですが、@ComponentScan は @Configuration を付けたクラスで Spring コンテナが管理するコンポーネントを使うよー、と伝えるためのものです。
実行する
それではコンパイルして実行してみます。
1 |
mvn compile exec:java -Dexec.mainClass=com.example.spring4.hello.App |
きちんと「Hello, World!」と表示されました。
1 2 3 4 5 |
... 2014/01/02 9:43:08 org.springframework.context.support.AbstractApplicationContext prepareRefresh 情報: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@1ba92db: startup date [Thu Jan 02 09:43:08 JST 2014]; root of context hierarchy Hello, world! ... |
Hello, World! してみて
久しぶりの Java でしたが、Maven3 と Spring4 を使って無事に Hello, World することができました。
設定ファイルを書かずにアノテーションベースでできるのは便利で良いですね。