ちょっと事情があって、Spring Framework2.5の勉強をすることになった。
最終的には、Hibernate3.1と連携させてごにょごにょって感じになる予定。
でも、とりあえず両方の基礎をきっちり覚えないとね!!
ということで、まずはSpring Frameworkから。
とりあえず、前提として、Spring Framework1.x系の知識ベースはある程度あることを前提(というか自分がそうなので)として話をします。
まずはHello worldから
Spring Framework1.x系の基礎は知ってるといっても、ブランクがあるので簡単なところから始めてみようと思う。
今回作るプログラムの登場人物は以下の3クラスです。
- springhello.Mainクラス
エントリポイントとなるクラスでApplicationContextとかを作ったりする。 - springhello.services.HelloServiceクラス
3番のHelloLogicクラスを使って処理を行う。HelloLogicクラスはDIで注入してもらう。 - springhello.logic.HelloLogicクラス
”こんにちは”を返すexecuteメソッドだけをもつシンプルなクラス
さくっと各々を作っていこうと思う。NetBeans6.5を起動してJavaApplicationを作成します。
プロジェクト名は、springhelloにしました。
まずは、3のHelloLogicから。説明いらずな簡単コード。
package springhello.logic;
public class HelloLogic {
public String execute() {
return "こんにちは";
}
}
次に、2のHelloServiceクラス。こちらも説明はいらないというか中間管理職的な動きしかしません。
package springhello.services;
import springhello.logic.HelloLogic;
public class HelloService {
private HelloLogic logic;
public void setLogic(HelloLogic logic) {
this.logic = logic;
}
public String execute() {
// 最終的にこんにちは世界という文字列になる
return logic.execute() + "世界";
}
}
次に1のMainクラス。まだSpringは使っていません。
package springhello;
import springhello.logic.HelloLogic;
import springhello.services.HelloService;
public class Main {
public static void main(String[] args) {
HelloService service = new HelloService();
service.setLogic(new HelloLogic());
String message = service.execute();
System.out.println(message);
}
}
今まで作ったHelloServiceとHelloLogicを組み立てて処理を実行しています。
これをSpringを使うように書き換えていきます。
NetBeansのプロジェクトウィンドウのライブラリの右クリックメニューからライブラリの追加を選択してSpring Framework 2.5を追加します。
次に、springhelloパッケージに新規作成から、その他→Spring XML 構成ファイルを選択する。ファイル名はapplicationにしました。(実際に作成されるファイルはapplication.xmlになります)
Spring名前空間という不思議なこと(Spring Framework2で追加されたものなのでここではとりあえずスルー)を聞かれるけど気にしないで完了します。
中身もさくっと定義します。beanタグが1につきSpring Frameworkに1つのクラスが登録される。propertyタグを使って、プロパティの値も設定できます。
<?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-2.5.xsd">
<!-- HelloLogicを登録 -->
<bean id="helloLogic" class="springhello.logic.HelloLogic" />
<!-- HelloServiceを登録。logicプロパティに上で定義したHelloLogicを設定する。 -->
<bean id="helloService" class="springhello.services.HelloService">
<property name="logic" ref="helloLogic" />
</bean>
</beans>
次に、Mainクラスを書き換えてSpringっぽくしてみようと思います。
package springhello;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import springhello.services.HelloService;
public class Main {
public static void main(String[] args) {
/*
HelloService service = new HelloService();
service.setLogic(new HelloLogic());
*/
// 上のコメントでやってるクラスの組立てをSpring Frameworkにまかせる
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"springhello/application.xml");
HelloService service = (HelloService) ctx.getBean("helloService");
String message = service.execute();
System.out.println(message); // こんにちは世界と表示される
}
}
要は、コードでやってたクラスの組立て処理をSpring Frameworkに任せてしまったということになります。
任せるといっても、どのクラスのインスタンスを使って、プロパティにはどんな値をセットするのかをXMLに書いただけです。
メリットは…まだ感じれない!!!まぁ超基本だからぼちぼちね。
とりあえずHello worldはこんなところかな。