XMLベースのBean定義ファイルの置き場所と指定方法を解説【Spring】

XMLベースのBean定義ファイルの置き場所と指定方法を解説【Spring】

XMLベースのBean定義ファイルの置き場所がわからない人「Spring Frameworkを使ってアプリケーション開発をしていますが、Bean定義を記述したXMLファイルの置き場所がわかりません。どこに置いたらBean定義が読み込まれますか?教えて下さい、よろしくお願いします。」


そんな疑問に答えます。

Bean定義ファイルの置き場所を説明する前に、以前以下のツイートをしました。

springのbean定義をXMLで記述したときの、相対パスファイル指定で少しハマった。 クラスパスか作業パスかで違う


これはXMLベースのBean定義ファイルの置き場所がわからなくてハマったときのものです。
このときに動きを見ながらファイルの置き場所を調査しました。その結果、疑問が解決したので本記事でまとめたいと思います。

それでは本題です。

著者情報

ちなみにですが、私は5年以上IT系エンジニアとして働いており、主にJavaを主戦場にしています。Webアプリケーションと業務系のアプリケーションの経験を持つごく普通のエンジニアです。

XMLベースのBean定義ファイルの置き場所を解説

結論から言うと、XMLベースのBean定義ファイルの置き場所には以下が選べます。

  • クラスパスからの相対パスに置く
  • 作業ディレクトリからの相対パスもしくは絶対パスに置く


順に説明します。

【場所①】クラスパスからの相対パスに置く

「クラスパスからの相対パス」とは、Spring Bootでアプリケーションを作成する場合だと、「target/classes」からの相対パスになります。

また、「target/classes」配下のファイルは開発時の「src/main/java」配下のファイルと「src/main/resources」配下のファイル一式がコンパイル時に移動したファイルになります。

つまり、開発時はXMLベースのBean定義ファイルを「src/main/java」配下もしくは「src/main/resources」の任意のディレクトリに置くことで、コンパイル後に「target/classes」配下に移動します。


上記を踏まえた上で、クラスパスからの相対パスを指定する方法は以下の2つになります。

  • ClassPathXmlApplicationContextクラスを使用する
  • FileSystemXmlApplicationContextクラス+prefixの「classpath」を使用する


順番に説明します。

【方法①】ClassPathXmlApplicationContextクラスを使用する

まず、クラスパスからの相対パスを指定する方法の1つとしてApplicationContextインターフェースの実装クラスであるClassPathXmlApplicationContextを使用する方法があります。

ClassPathXmlApplicationContextはクラスパスからBean定義ファイルを読み込み、DIコンテナにコンポーネントを登録し、管理するクラスです。

使い方は以下のようになります。

/**
 * 「src/java/conf/AppContext.xml」もしくは「src/resources/conf/AppContext.xml」にBean定義ファイルを置いた場合
 **/
ApplicationContext xmlContext = new ClassPathXmlApplicationContext("conf/AppContext.xml");

【方法②】FileSystemXmlApplicationContextクラス+prefixの「classpath」を使用する

クラスパスからの相対パスを指定する2つ目の方法はApplicationContextインターフェースの実装クラスであるFileSystemXmlApplicationContextとprefix「classpath」を使用する方法です。

FileSystemXmlApplicationContextはファイルシステムもしくはURLからBean定義ファイルを読み込み、DIコンテナにコンポーネントを登録し、管理するクラスです。

FileSystemXmlApplicationContextは後述する作業ディレクトリからの相対パスもしくは絶対パスを指定することでBean定義ファイルを読み込むことが通常の使い方ですが、prefix「classpath」を使用することで、クラスパスからの相対パスの指定が可能になります。

使い方は以下のようになります。

/**
 * 「src/java/conf/AppContext.xml」もしくは「src/resources/conf/AppContext.xml」にBean定義ファイルを置いた場合
 **/
ApplicationContext xmlContext = new FileSystemXmlApplicationContext("classpath:conf/AppContext.xml");

【場所②】作業ディレクトリからの相対パスもしくは絶対パスに置く

「作業ディレクトリからの相対パス」とは、今現在いるディレクトリになります。
「絶対パス」はルートディレクトリからのパスになります。

上記を踏まえた上で、作業ディレクトリからの相対パスもしくは絶対パスを指定する方法は以下の2つになります。

  • FileSystemXmlApplicationContextクラスを使用する
  • ClassPathXmlApplicationContextクラス+prefixの「file」を使用する


順に説明します。

【方法①】FileSystemXmlApplicationContextクラスを使用する

まず、作業ディレクトリからの相対パスもしくは絶対パスを指定する方法の1つとしてApplicationContextインターフェースの実装クラスであるFileSystemXmlApplicationContextを使用する方法があります。

前述した通り、FileSystemXmlApplicationContextはファイルシステムもしくはURLからBean定義ファイルを読み込み、DIコンテナにコンポーネントを登録し、管理するクラスです。

使い方は以下のようになります。

/**
 * 作業ディレクトリが「/root/demo/」かつ「/root/demo/conf/AppContext.xml」にBean定義ファイルを置いた場合
 **/
ApplicationContext xmlContext = new FileSystemXmlApplicationContext("conf/AppContext.xml");

/**
 * Bean定義ファイルを置いた絶対パスを指定した場合
 **/
ApplicationContext xmlContext = new FileSystemXmlApplicationContext("/root/demo/conf/AppContext.xml");

【方法②】ClassPathXmlApplicationContextクラス+prefixの「file」を使用する

クラスパスからの相対パスを指定する2つ目の方法はApplicationContextインターフェースの実装クラスであるClassPathXmlApplicationContextとprefix「file」を使用する方法です。

前述した通り、ClassPathXmlApplicationContextはクラスパスからBean定義ファイルを読み込み、DIコンテナにコンポーネントを登録し、管理するクラスです。

ClassPathXmlApplicationContextは前述したクラスパスからの相対パスを指定することでBean定義ファイルを読み込むことが通常の使い方ですが、prefix「file」を使用することで、作業ディレクトリからの相対パスもしくは絶対パスの指定が可能になります。

使い方は以下のようになります。

/**
 * 作業ディレクトリが「/root/demo/」かつ「/root/demo/conf/AppContext.xml」にBean定義ファイルを置いた場合
 **/
ApplicationContext xmlContext = new ClassPathXmlApplicationContext("file:conf/AppContext.xml");

/**
 * Bean定義ファイルを置いた絶対パスを指定した場合
 **/
ApplicationContext xmlContext = new ClassPathXmlApplicationContext("file:/root/demo/conf/AppContext.xml");


XMLベースのBean定義ファイルの置き場所と指定方法の説明は以上になります。
開発をしていく上での参考になれば幸いです。
Spring Frameworkアプリケーション開発を自分のものにしましょう!


人気記事①:
【厳選4冊+α】Spring Framework初心者におすすめな本

人気記事②:現役エンジニアがおすすめするプログラミングスクール5社:無料あり