Spring Framework 始めました

私がゴリゴリJavaをコーディングしていた頃はEJB全盛期だった訳ですが、ふと周りを見渡してみるとDIなんて言葉が闊歩している。遅れているな自分・・・
と云う事で早速私も遅まきながらDIの世界を体験してみようと思います。


DI(Dependency Injection)で検索すると良く目にするのがSpring FrameworkというDIコンテナ。
これがわりと有名っぽいので、まあ何はともあれ早速コーディング開始です。

まずはBeanを作る。こんな感じ。
#Message.java

package sp.sample.data;

public class Message {
  public String text;

  public String getText() {
    return text;
  }

  public void setText(String text) {
    this.text = text;
  }
}

Beanが出来たので、次はBean用定義ファイルを作る。
#beans.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 name="m_message" class="sp.sample.data.Message">
        <property name="text"><value>Good Morning !!</value></property>
    </bean>
    <bean name="e_message" class="sp.sample.data.Message">
        <property name="text"><value>Good Evening !!</value></property>
    </bean>
</beans>

最後に呼び出す人を作る。
#Person.java

package sp.sample.core;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;

import sp.sample.data.Message;

public class Person {
  public static void main (String[] args) {
    try {
      XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource("beans.xml"));
      Message mMessage = (Message)factory.getBean("m_message");
      Message eMessage = (Message)factory.getBean("e_message");
      
      System.out.printf("mMessage=%s\n", mMessage.getText());
      System.out.printf("eMessage=%s\n", eMessage.getText());
      
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

んで、クラスパスにspring.jarを追加して実行!!

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
	at org.springframework.beans.factory.support.AbstractBeanFactory.<init>(AbstractBeanFactory.java:99)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.<init>(AbstractAutowireCapableBeanFactory.java:104)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.<init>(AbstractAutowireCapableBeanFactory.java:113)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.<init>(DefaultListableBeanFactory.java:87)
	at org.springframework.beans.factory.xml.XmlBeanFactory.<init>(XmlBeanFactory.java:67)
	at org.springframework.beans.factory.xml.XmlBeanFactory.<init>(XmlBeanFactory.java:56)
	at sp.sample.core.Person.main(Person.java:11)

ありゃ。エラーが。apache.commons.loggingも必要なのね。
と云う事でクラスパスにcommons-logging.jarを追加して再度実行!!

mMessage=Good Morning !!
eMessage=Good Evening !!

はい。無事に出力されました。簡単ですね。

[memo]

  • 定義ファイルが冗長になってきた時の管理は?

- Beanに値を動的に設定するにはどうするんだろう?