かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Seasar2.4系が出たので再入門

Seasar2.4が出たので早速ダウンロード

昔に触って以来追加機能をかを軽くチェックするだけで手を動かして無かったので久しぶりに手を動かしてみようと思う

まずはHello world

自分はWebアプリよりは普通のJavaアプリが好きなので…
コンソールのHelloWorldから

package org.sample.s2.component;

public interface Greeter {
	void greet();
}

ありがちですが

package org.sample.s2.component;

public interface Messenger {
	String getMessage();
}

こんなインターフェイスを用意して

package org.sample.s2.component.impl;

import org.sample.s2.component.Greeter;
import org.sample.s2.component.Messenger;

public class GreeterImpl implements Greeter {

	private Messenger messenger;

	public void greet() {
		System.out.println(messenger.getMessage());
	}

	public Messenger getMessenger() {
		return messenger;
	}

	public void setMessenger(Messenger messenger) {
		this.messenger = messenger;
	}

}

ありがちな

package org.sample.s2.component.impl;

import org.sample.s2.component.Messenger;

public class MessengerImpl implements Messenger {

	public String getMessage() {
		return "Hello world";
	}

}

実装をしてみる。

dicon用意だぜ

次のステップはDIコンテナにはつきものの設定ファイル。
ComponentAutoRegisterを使用してみるべ。
Mainという名前のクラスにmainメソッドを用意する予定なので、それをベースにクラスを探してもらうように記述をする。

app.dicon
-----------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
	"http://www.seasar.org/dtd/components24.dtd">
<components>
	<component class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
		<initMethod name="addReferenceClass">
			<arg>@org.sample.s2.Main@class</arg>
		</initMethod>
		<initMethod name="addClassPattern">
			<arg>"org.sample.s2"</arg>
			<arg>".*Impl"</arg>
		</initMethod>
	</component>
</components>
ついにmainメソッド

エントリポイントとなるクラスは以下の通り。

package org.sample.s2;

import org.sample.s2.component.Greeter;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

public class Main {
	private static final String CONFIG_PATH = "app.dicon";
	public static void main(String[] args) {
		SingletonS2ContainerFactory.setConfigPath(CONFIG_PATH);
		SingletonS2ContainerFactory.init();
		try {
			new Main().execute();
		} finally {
			SingletonS2ContainerFactory.destroy();
		}
	}
	private void execute() {
		S2Container con = SingletonS2ContainerFactory.getContainer();
		Greeter g = (Greeter) con.getComponent(Greeter.class);
		g.greet();
	}
}

実行すると見慣れたHello worldの文字が見えました。
メデタシメデタシ。

何をした?

とりあえずHello worldを作成するために

  1. EclipseJava Projectを作成
  2. ダウンロードしてきたseasar2.4のlibの中にあるjarをクラスパスに追加
  3. プログラムを書き書き
  4. diconファイルを書き書き
  5. メインのクラスを書き書き
  6. 実行

このくらいだとdicon書いて〜とかメンドクサイけど大きくなってくると楽さがわかるのかな?