2008年12月6日土曜日

改めてSpringを試す(DIコンテナとしての)

これまでSpring MVCのついでにSpringの機能を使って気ましたが、改めてDIコンテナとしてのSpringコアを触ってみたいと思います。

大体"DIコンテナ"なんていう名称が胡散臭かったんだよね。またしてもJargonか。けっ。位にしか思っていなかった。でも理解しないままケチをつけるのもカッコ悪いので。

試したのは以下のチュートリアルです。こなれていて(特徴の示し方がシンプルで明確。分かりやすい)悪くないです。
http://www.atmarkit.co.jp/fjava/rensai3/springdi01/springdi01_2.html

【まとめ】

いや、Springって結構いいアイデアですね。要するにXMLを介してオブジェクトを連携させることで、疎結合やAOP(処理の注入。intercept。そんな感じ)を実現するフレームワークです。例によってSpringの本質をぜんぜん理解してなかったみたい(なんでわざわざHibernateやらStrutsと連携させる必要があるんだ。わずらわしい。くらいの認識でした。お恥ずかしい)。

以前「SpringはアーミーナイフでStrutsは鋭い刃物」と喩えました。このときはSpring MVCのみを念頭においていたのですが、Spring全体に対しても当たらずとも遠からずかもしれません。Springは便利で軽快な汎用ツール群だと思います。それにSpringで開発するのは結構楽しい(これって重要)。エンジニア魂をくすぐる。人気があるのも理解できます。

使い場所にもよるでしょうが、プロジェクトによっては有効ではないでしょうか。ただちょっとマニアックな気がするなあ。Springで作って良かった。と実感するケースはあまりなかったりして・・・(「再利用可能性」を志向して一生懸命デザインしても、実は誰も再利用しない、とかそんな感じ)

【おまけ】

チュートリアルの流れで少し拡張してみました。(ぜんぜん大したものではないですが一応)

■ SpringTest.java
package test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {

/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Target target = (Target) context.getBean("target");
System.out.println(target.getMessage());
Parent parent = (Parent) context.getBean("parent");
System.out.println("親:" + parent.getName());
List<Child> children = parent.getChildren();
for (Child child : children) {
System.out.println(child.getName());
}

}

}

■ applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="target" class="test.Target">
<property name="message">
<value>Hello World!</value>
</property>
</bean>
<bean id="oldest-son" class="test.Child">
<property name="name">
<value>長男</value>
</property>
<property name="no">
<value>1</value>
</property>
</bean>
<bean id="oldest-daughter" class="test.Child">
<property name="name">
<value>長女</value>
</property>
<property name="no">
<value>2</value>
</property>
</bean>

<bean id="parent" class="test.Parent">
<property name="children">
<list>
<ref bean="oldest-son" />
<ref bean="oldest-daughter" />
</list>
</property>
<property name="name">
<value>親</value>
</property>
</bean>
</beans>

■Parent.java

package test;

import java.util.List;

public class Parent {

private List<Child> children;
private String name;

public List<Child> getChildren() {
return children;
}
public void setChildren(List<Child> children) {
this.children = children;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}

■Child.java

package test;

public class Child {
private String name;
private Integer no;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getNo() {
return no;
}
public void setNo(Integer no) {
this.no = no;
}
}

以上
.

0 件のコメント: