Spring(Spring Framework)は様々な機能を提供するフレームワークである。DI(Dependency Injection、依存性の注入、インジェクション)することによりオブジェクトを管理するDIコンテナのフレームワークでもある。WEBアプリケーションだけでなく、バッチなどのJavaアプリケーションにも使用できる。 リソース管理、DBアクセス、MVCフレームワーク、AOP、バッチフレームワークなどの機能を提供しており、開発者が必要な機能を選択して使うこととなる。
基本的にはMavenかGradleでダウンロードする。
直接ダウンロードする場合は、http://repo.spring.io/release/org/springframework/spring/からダウンロードできる。 Maven Repositoryのサイト(http://mvnrepository.com/)から個別にjarをダウンロードすることも可能。("spring"で検索)
取得したjarファイルをクラスパスへ通す。使用しない機能については配置しなくてもよい。なお今回はVer4.2.4を使用する。
Springがログの出力に「Apache Commons Logging」を利用しているので、これもダウンロードが必要。
公式サイト(https://commons.apache.org/proper/commons-logging/)からダウンロードする。
Springの機能を利用する上で、最も基本的かつ重要なの概念はオブジェクトのインジェクションである。ここではオブジェクトをインジェクトする単純なサンプルを紹介する。
まずはSpringの設定ファイルを作成する。
下記のファイル(ApplicationContext.xml)を作成し、クラスパス直下に配置する。<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-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<bean class="test.SpringSample" />
</beans>
※これは最もシンプルな構成の1つであり、<bean class="test.SpringSample" />によってtest.SprintSampleクラス(次で作成)がインジェクション対象となる。
SpringSample.javaをtestパッケージに作成する。
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
public class SpringSample {
public static void main(String[] args){
// ①コンテキスト取得
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
// ②インスタンスの取得
SpringSample ss = context.getBean(SpringSample.class);
// ③メソッドコール
ss.out();
}
public void out(){
System.out.println("Spring Test");
}
}
①コンテキスト(ApplicationContext)取得。ClassPathXmlApplicationContextはクラスパスからSpring設定ファイルを探して読み込んでくれる。
②SpringSampleクラスのインスタンス取得。自分で生成せずにApplicationContextから取得している。
③取得したオブジェクトのメソッドを呼び出す。
Spring Test
ApplicationContext.xmlにbean定義を書くのが面倒な場合は、<context:component-scan base-package="test" />を使うことにより、testパッケージ配下のコンポーネントを自動検索(スキャン)してインジェクションさせることができる。
<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-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="test" />
</beans>
Javaソースは、先ほどとほぼ同じだが、スキャンで見つけてもらえるように@Componentアノテーションをクラスに付ける必要がある。
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class SpringSample {
public static void main(String[] args){
// ①コンテキスト取得
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
// ②インスタンスの取得
SpringSample ss = context.getBean(SpringSample.class);
// ③メソッドコール
ss.out();
}
public void out(){
System.out.println("Spring Test");
}
}