トッカンソフトウェア

SpringFrameworkでHello World(Javaアプリケーション)

EclipseでSpring Frameworkを使って Hello World を表示させます。


まずは動かしてみましょう

EclipseでJavaProjectを作成します。特になにか特別は設定は必要なく、普通にJavaのProjectを作成します。



そのままNextへ


そのままFinishへ


JavaProjectを作成したら、MavenProjectに変換します。


そのままFinishへ


MavenProjectに変換されると pom.xml が作成されるので、中身を編集します。


pom.xml を以下のように変更し、保存します。

<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>springTest</groupId>
	<artifactId>springTest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<release>17</release>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>5.3.22</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.3.22</version>
		</dependency>
	</dependencies>
</project>
				
Mavenはpom.xmlファイルを書き換えるだけで、対象のライブラリを取得してくれます。
今回はspring-core、spring-contextを取得します。

次にSpring用の設定ファイルを作成します。


名前はなんでも良いのですが、今回は「SpringTest.xml」とします。


中身はこんな感じ。
				
<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-4.2.xsd">

	<bean id="helloWorld" class="spring.test.SpringBean">
		<property name="text" value="Hello World!!" />
	</bean>

</beans>


			
SpringBeanクラスよりオブジェクトを生成して、textという属性に「Hello World!!」をセットして、取得するときは helloWorld というキーで取得すると宣言しています。


設定ファイルを作ったら、あとはJavaファイルを作ります。

まずは 実行対象となるJavaクラス(HelloWorldTest.java)を作ります。
				
package spring.test;

import org.springframework.context.support.FileSystemXmlApplicationContext;

public class HelloWorldTest {
	public static void main(String[] args) {
		FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("C:\\workspace\\springApp\\SpringTest.xml");
// クラスパス指定でも可
//		FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("classpath:SpringTest.xml");

		SpringBean bean = (SpringBean) context.getBean("helloWorld");
		bean.show();

		context.close();
	}
}


			
FileSystemXmlApplicationContextクラスでファイルのフルパスを指定してSpring設定ファイルを読み込んでいます(注意:エンマークは2つ)。
クラスパスより取得する場合は、ClassPathXmlApplicationContextクラスが用意されています。


次に設定ファイルよりSpringがデータをセットするBeanクラス(SpringBean.java)を作成します。
				
package spring.test;

public class SpringBean {
	private String text;

	public void show() {
		System.out.println(text);
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
}


			

準備は以上で終わりです。それでは実行してみましょう。


作成したファイルに問題がなければ、「Hello World!!」と表示されます。

DI(Dependency Injection)について

普通のJavaプログラムでは、SpringBean bean = new SpringBean()のようなオブジェクトを生成する処理、beanに値をセットする処理の記述が必要に なりますが、これらの処理はSpringがやってくれています。

このおかげで呼び出し元プログラムから呼び出し先を変える場合、設定ファイルを変更するだけ良いためで呼び出し元プログラムは変更なしでいけます。

こんな感じの呼び出し元プログラム内で呼び出し先オブジェクトを生成するのではなく、外部でオブジェクトを生成し呼び出し元プログラムにセットすることを
DI(Dependency Injection)、依存性の注入、インジェクションなどで呼ばれています


インターフェースの活用

上の例では、ソースを出来るだけ少なくしているため何が良いのか分かり難いですが、SpringBeanをクラスではなくインターフェースすると分かりやすいです

通常のJavaプログラムでは HelloWorldTest.java の中でインターフェース実装クラスのオブジェクト生成処理を記述する必要がありますが、今回のプログラムでは SpringTest.xml にインターフェース実装クラスを指定するのみで、HelloWorldTest.java にインターフェース実装クラスの記述が必要ありません。


SpringBean.java(クラスからインターフェースに変更)
				
package spring.test;

public interface SpringBean {

	public void show();

}


			
SpringBeanの実装クラスを用意します。


SpringBeanImpl1.java
				
package spring.test;

public class SpringBeanImpl1 implements SpringBean {
	private String text;

	public void show() {
		System.out.println("One : " + text);
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
}


			

SpringBeanImpl2.java
				
package spring.test;

public class SpringBeanImpl2 implements SpringBean {
	private String text;

	public void show() {
		System.out.println("Two : " + text);
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
}


			
上記のように実装クラスが複数存在した場合、どの実装クラスを使用するかは、Spring設定ファイルで決められます。
例えば以下の様に SpringBeanImpl1 を指定した場合、SpringBeanImpl1が使用されます。

設定ファイル
				
<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-4.2.xsd">

	<bean id="helloWorld" class="spring.test.SpringBeanImpl1">
		<property name="text" value="Hello World!!" />
	</bean>

</beans>


			
実行結果
				
One : Hello World!!


			

設定ファイルの SpringBeanImpl1 を SpringBeanImpl2 に変更すると SpringBeanImpl2 が実行されます。

実行結果
				
Two : Hello World!!


			
このようにどの実装クラスを使用するにも呼び出し元である HelloWorldTestクラス を修正する必要がありせん。

ページのトップへ戻る