spring framework を使ったデスクトップアプリ(standalone app)で context から getBean でオブジェクトを取得する

公開日: : 最終更新日:2014/01/26 SpringFramework ,

Java では珍しく Web ではなくデスクトップアプリの開発があり、そのプロジェクトで Spring を使うことになりました。
デスクトップアプリで DI を使ったオブジェクトの取得って、これまでやったことがなかったので検証プログラムを作成しました。
検証プログラムは Github に登録してあります。

icatch-spring

目次

1. 動作環境

1-1. Java

Java のバージョンは次の通りです。

$ java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

ですが、いろいろ都合があって、pom.xml にはコンパイラのバージョンを 1.6 で定義しています。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.0</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
    <encoding>UTF-8</encoding>
  </configuration>
</plugin>

1-2. Maven

この検証プログラムは Maven を使ってビルドしています。 プログラム作成時に使用した Maven のバージョンは次の通りです。

$ mvn -v
Apache Maven 3.0.4 (r1232337; 2012-01-17 17:44:56+0900)
Maven home: C:\Users\xxx\maven-3.0.4
Java version: 1.7.0_11, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_11\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

1-3. Spring

pom.xml を見ればそこにバージョンは書いてありますが。

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>3.2.6.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>3.2.6.RELEASE</version>
</dependency>

2. プログラムについて

検証プログラムは次の3本です。

  • src/main/java/net/tomoyamkung/App.java
  • src/main/java/net/tomoyamkung/model/HogeModel.java
  • src/main/java/net/tomoyamkung/model/HogeModelImpl.java

それぞれのプログラムの JavaDoc を載せておきます。 どのような役割をもったプログラムなのか何となく分かると思います。

2-1. App.java

/**
 * 動作確認用の実行クラス。
 * 
 * @author tomoyamkung
 *
 */

2-2. HogeModel.java

/**
 * Context から取得するサンプル Bean のインタフェース。
 * 
 * @author tomoyamkung
 *
 */

2-3. HogeModelImpl.java

/**
 * Context から取得するサンプル Bean クラス。
 * 
 * @author tomoyamkung
 *
 */

3. applicationContext.xml について

Spring の設定ファイルである applicationContext.xml は次のディレクトリに置いてあります。

  • src/main/resouces

このディレクトリはクラスパスが通っています(Maven のデフォルト設定)。


上記の HogeModel.javaHogeModelImpl.java の DI 設定は次のように定義してあります。

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="  
           http://www.springframework.org/schema/beans classpath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context classpath:/org/springframework/context/config/spring-context-3.0.xsd">

    <!-- model -->
    <context:component-scan base-package="net.tomoyamkung.model" />
    <bean id="hogeModel" class="net.tomoyamkung.model.HogeModelImpl" />

</beans>

4. applicationContext から Bean を取得する方法

ここが本検証プログラムで確認したかった部分です。

手順は次の通り単純です。

  1. クラスパス上にある applicationContext.xml を指定して ClassPathXmlApplicationContext を生成する
  2. ClassPathXmlApplicationContext#getBean を使って Bean を取得する

具体的な実装は App.java にありますが、コードを載せておきます。

/**
 * 動作確認用の実行クラス。
 * 
 * @author tomoyamkung
 *
 */
public class App {

    /**
     * Spring の設定ファイル "applicationContext.xml" のパス。
     * 
     * クラスパス上に applicationContext.xml がある場合、このような書き方で参照できる。
     */
    private static final String SPRING_CONFIG_FILE = "classpath:applicationContext.xml";

    /**
     * 動作確認用の実行メソッド。
     * 
     * @param args
     */
    public static void main(String[] args) {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext(SPRING_CONFIG_FILE);

        HogeModel bean = context.getBean(HogeModel.class); // インタフェースの型を指定して取得する
        bean.printLog("Hello, spring-standalone-sample!!");

        context.close(); // close しないと警告が出る
    }
}

5. 動作方法

  1. 本プロジェクトを clone する、もしくはダウンロードする
  2. プロジェクトに移動してビルドする
  3. App.java を実行する

ビルドのコマンドは次の通りです。

$ mvn clean package

App.java を実行すると、次のような内容がコンソールに出力されます。

2014-01-21 00:49:58,145 DEBUG net.tomoyamkung.model.HogeModelImpl.printLog:22 - Hello, spring-standalone-sample!!

6. まとめ

今さら感がありますが、これまでやったことがなかったので検証してみました。
必要最低限しか作っていないので、同じような仕様でアプリを作るときのひな形に使えるかなと思っています。

7. その他の Spring に関する記事

Spring に関する記事は次の通りです。
気になる記事があったらぜひチェックしてみてください!

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

Financial injection

spring framework を使ったデスクトップアプリ(standalone app)で context から getBean でオブジェクトを取得する。@Autowired による紐付け

先日 spring framework を使ったデスクトップアプリ(standalone app)で

記事を読む

icatch-java

Spring の設定ファイル applicationContext.xml の内容をプロパティファイルに切り出す

Spring の設定ファイルである applicationContext.xml に DataSou

記事を読む

icatch-cron_5578829409

Spring の Scheduled アノテーションを使った cron サンプル

Spring の @Scheduled アノテーションを使った cron サンプルプログラムを作成し

記事を読む

icatch-dbcp-219581864

Spring の DataSource に DBCP を使用する

Spring の DataSource に DBCP を設定してみたのでメモしておきます。 目

記事を読む

icatch-mysql_5578829409

MySQL の JDBC ドライバで設定しておきたい rewriteBatchedStatements プロパティ

データベースに MySQL を使った Java アプリのバッチ更新処理について非常に勉強になることが

記事を読む

icatch-log_5578829409

SpringJDBC が発行する SQL をログに出力する

SpringJDBC が発行する SQL を確認する必要があったので Apache log4j 1.

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


七 + = 11

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑