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に値を動的に設定するにはどうするんだろう?