framework 入門

なんとなしに springframework を使ってみた。
ubuntu だと springide とかはあるみたいだけど、ライブラリ自体があるのか謎だったし、あたらしめがいいだろうと思って、公式から 2.5 を落としてインストした。

インストール自体は結構簡単というか、バイナリファイルが存在するので公式から単純に zip ファイルをダウンロードするだけ。

http://www.springframework.org/

んで適当なところに解凍したら dist 以下にある spring.jar を CLASSPATH に入れておけばいいみたい。ちなみに自分はプロジェクトの lib の下にコピーしておいて build.xml に設定しておいた。
なんか依存ライブラリはあるみたいだけど、とりあえず自分の環境だと apache logging パッケージが無いとか言われたので apt でとりあえず導入

% sudo aptitude install libcommons-logging-java
% cp /usr/share/java/commons-logging-1.1.jar lib

後は、こんな感じのソースを書いておくと

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

public class Main
{
    public static void main(String[] args) {
        XmlBeanFactory factory
            = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        Person p = (Person)factory.getBean("japanese");
        System.out.println(p.hello());

        p = (Person)factory.getBean("english");
        System.out.println(p.hello());
    }
}
% java -jar hello.jar                 [~/src/java/spring/hello]
log4j:WARN No appenders could be found for logger (org.springframework.beans.factory.xml.XmlBeanDefinitionReader).
log4j:WARN Please initialize the log4j system properly.
こんにちわ
hello

こんな感じで spring が動いてるのが分かるみたい。
自前で Factory のコード書かなくてもよいってのはちょっといいなーとは思うんだけど、やっぱり xml ファイルに記述するってのも少し面倒くさいな。
とりあえずもうちょっといじってみたいなー
以下残りのソース

Person.java

package org.hilib.hello;

public interface Person
{
    public String hello();
}

PersonImpl.java

package org.hilib.hello;

public class PersonImpl implements Person
{
    private String helloMsg;

    public PersonImpl() { helloMsg = null; }

    @Override
    public String hello() { return helloMsg; }

    public void setHelloMsg(String msg) {
        helloMsg = msg;
    }
}

applicationContext.xml

<?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">

  <bean id="japanese" class="org.hilib.hello.PersonImpl">
    <property name="helloMsg" value="こんにちわ"/>
  </bean>

  <bean id="english" class="org.hilib.hello.PersonImpl">
    <property name="helloMsg" value="hello"/>
  </bean>

</beans>