今回の目標

  • Springアノテーションを使ったDIを実装する。
    • Beanをインジェクションする。
    • プロパティファイルからの定数をインジェクションする。

検証環境作成

設定ファイル

Bean定義ファイル(application.xml)
  • アノテーションで記述出来るようにするため、★の行と▼から▲までを追加。
  • (*1)の部分にはパッケージ名を指定する。指定したパッケージ配下でアノテーションが有効になる。
  • (*2)の部分には任意のプロパティファイル指定する。
    • プロパティファイルが複数あるなら、<value>タグを増やして追加。
<?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 
	http://www.springframework.org/schema/beans/spring-beans.xsd
★	http://www.springframework.org/schema/context
★	http://www.springframework.org/schema/context/spring-context-3.0.xsd
	">
<!-- 省略 -->
<!-- ▼ここから -->
	<!-- アノテーションを有効にする -->
	<context:component-scan base-package="jp.holenews.w2u (*1)"/>
	<!-- プロパティファイルを認識させる -->
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:config.properties (*2)</value>
			</list>
		</property>
	</bean>
<!-- ▲ここまで -->
<!-- 省略 -->
</beans>
プロパティファイル(config.properties)
  • この値をSpringを使ってインジェクションする。
### テスト ###
hoge.num=20
hoge.str=にゃーん
web.xml
  • テスト用サーブレットを登録しておく。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
 id="WebApp_ID" version="2.5">

	<!-- 省略 -->

	<!-- ▼テスト用サーブレット -->
	<servlet>
    		<servlet-name>TestServlet</servlet-name>
    		<servlet-class>jp.holenews.w2u.test.TestServlet</servlet-class>
  	</servlet>
	<servlet-mapping>
		<servlet-name>TestServlet</servlet-name>
		<url-pattern>/TestServlet</url-pattern>
	</servlet-mapping>
	<!-- ▲テスト用サーブレット -->
</web-app>

プログラムソース

TestController.java
package jp.holenews.w2u.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.*;
/**
 * @ComponentをつけておけばSpringコンテナに管理される。
 */
@Component
public class TestController {
	/**
	 * 「@Autowired」にしておけば型が一致するものを探してインジェクションしてくれる
	 */
	@Autowired
	private TestDIBean testDIBean;

	// 以下、testDIBeanのgetter, setter
}
TestDIBean .java
package jp.holenews.w2u.test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.*;
/**
 * @ComponentをつけておけばSpringコンテナに管理される。
 */
@Component
public class TestDIBean {
	
	// @Valueにプロパティファイルのキーを指定すると値が取れる。
	// 「20」の値が取れるはず。
	@Value("${hoge.num}")
	private int number;
	
	// 上に同じ。「にゃーん」が取れるはず。
	@Value("${hoge.str}")
	private String str;

	// 以下、numberとstrのgetter, setter
}
TestServlet .java
package jp.holenews.w2u.test;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoaderListener;
/**
 * テスト用サーブレット
 */
public class TestServlet extends HttpServlet {
	
	/**
	 * ※doGet以外は省略
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	      // アプリケーションコンテキストの取得
	      ApplicationContext contxt = ContextLoaderListener.getCurrentWebApplicationContext();
	      
	      // Beanの取得。getBeanの引数には頭を小文字にしたクラス名を指定。
	      TestController target = (TestController)contxt.getBean("testController");
	      // さらにTestControllerにインジェクションしたTestDIBeanを取得
	      TestDIBean bean = target.getTestDIBean();
	      // TestDIBeanに設定したプロパティファイルの値を取得
	      int i = bean.getNumber();
	      String str = bean.getStr();
	      
              // 結果を出力
	      response.setContentType("text/html; charset=UTF-8");
	      PrintWriter w = response.getWriter();
	      w.println(str);
	      w.println(i);
	}
}

結果確認

にゃーん 20

このページへのコメント

JaL6eI I appreciate you sharing this blog.Really thank you! Awesome.

0
Posted by awesome things! 2014年01月21日(火) 11:03:05 返信

cGqXux <a href="http://yorlfrcbbdoj.com/">yorlfrcbbdoj</a>, [url=http://syctwacpfqlx.com/]syctwacpfqlx[/url], [link=http://xbpevblreafz.com/]xbpevblreafz[/link], http://ejqqmtdxmplk.com/

0
Posted by kkwpwvkzxqc 2013年11月14日(木) 11:19:20 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます