スプリング(1):スプリング入門、IOC紹介

9673 ワード

http://mynote.iteye.com/admin/blogs/1174520
まず上のこの簡単な工場の例を見てください。
 
springのIOCは簡単な工場と似ています。クライアントのために例を生成します。上の簡単な工場をspringに変えて実現します。以下の通りです。
 
Personインターフェース
package com.test;

public interface Person {
	public String sayHello(String name);
	public String sayGoodbye(String name);
}
 
Chinese
package com.test;

public class Chinese implements Person {

	public String sayGoodbye(String name) {
		return "  ! "+name;
	}

	public String sayHello(String name) {
		return "  ! "+name;
	}

}
 
American
package com.test;

public class American implements Person {

	public String sayGoodbye(String name) {
		return "GoodBye! "+name;
	}

	public String sayHello(String name) {
		return "Hello! "+name;
	}

}
 
appication Contect.xmlプロファイル
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>  
  <bean id="chinese" class="com.test.Chinese"/>
  <bean id="american" class="com.test.American"/>
</beans>
 
テストクラス
package com.test;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Client {
	public static void main(String[] args) {
		ClassPathResource cpr = new ClassPathResource("applicationContext.xml");
		XmlBeanFactory factory = new XmlBeanFactory(cpr);
		Chinese chinese = (Chinese) factory.getBean("chinese");
		System.out.println(chinese.sayHello("lisi"));
		System.out.println(chinese.sayGoodbye("lisi"));
	}
}
結果プリントアウト:こんにちは。lisi
                  さようなら。lisi
 
もう一つの例を見ます。
Personインターフェース
package com.test;

public interface Person {
	public void doWork();
}
 
Toolインターフェース
package com.test;

public interface Tool {
	public void doRealWork();
}
 
具体類:Chinese
package com.test;

public class Chinese implements Person {
	private Tool tool;

	public void doWork() {
		tool.doRealWork();
	}

	public Tool getTool() {
		return tool;
	}

	public void setTool(Tool tool) {
		this.tool = tool;
	}
}
 
具体的なツールA
package com.test;

public class ConcreteToolA implements Tool {

	public void doRealWork() {
		System.out.println("do concrete tool a");
	}

}
 
springプロファイルは、chineseのbeanでCocrete ToolAを引用した例が見られます。
<bean id="toolA" class="com.test.ConcreteToolA"/>
<bean id="chinese" class="com.test.Chinese">
	<property name="tool" ref="toolA"/>
</bean>
 テストクラス
package com.test;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Client {
	public static void main(String[] args) {
		ClassPathResource cpr = new ClassPathResource("applicationContext.xml");
		XmlBeanFactory factory = new XmlBeanFactory(cpr);
		Person person = (Person) factory.getBean("chinese");
		person.doWork();
	}
}
  
印刷結果:ドconcrete tool a
 
もう一つの例を見てください。springプロファイルで属性を設定できる値です。 
 
Greeeting Serviceインターフェース
package com.springinaction.chapter01;

public interface GreetingService {
	public void sayGreeting();
}
 
具体的な実現クラス
package com.springinaction.chapter01;

public class GreetingServiceImpl implements GreetingService {
	private String greeting;

	public void sayGreeting() {
		System.out.println(this.greeting);
	}
	
	public void setGreeting(String greeting) {
		this.greeting = greeting;
	}
	
}
 
 
springプロファイル
<bean id="greetingService"  class="com.springinaction.chapter01.GreetingServiceImpl">
    <property name="greeting">
        <value>lisi</value>
    </property>
  </bean>
 
テストクラス
package com.springinaction.chapter01;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class HelloApp {
	public static void main(String[] args) {
		ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");
		GreetingService greetingService = (GreetingService) context.getBean("greetingService");
		greetingService.sayGreeting();
	}
}
 
 
クラスの属性が配列タイプの場合、どう処理しますか?次の例を見ます
インターフェースクラス
package com.test;

public interface Person {
	public void test();
}
 
具体的な種類のPersonは、多くの集合タイプを定義しています。
package com.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class Chinese implements Person {
	private List schools = new ArrayList();
	private Map score = new HashMap();
	private Properties health = new Properties();
	private Set tools = new HashSet();

	public Map getScore() {
		return score;
	}

	public void setScore(Map score) {
		this.score = score;
	}

	public Properties getHealth() {
		return health;
	}

	public void setHealth(Properties health) {
		this.health = health;
	}
	
	public Set getTools() {
		return tools;
	}

	public void setTools(Set tools) {
		this.tools = tools;
	}
	
	public List getSchools() {
		return schools;
	}

	public void setSchools(List schools) {
		this.schools = schools;
	}

	public void test() {
		System.out.println(schools);
		System.out.println(score);
		System.out.println(health);
		System.out.println(tools);
	}

}
 
springプロファイルに値を割り当てます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>  
	<bean id="toolA" class="com.test.ConcreteToolA"/>
  	<bean id="chinese" class="com.test.Chinese">
  		<property name="schools">
  			<list>
  				<value>  </value>
  				<value>  </value>
  				<value>  </value>
  			</list>
  		</property>
  		
  		<property name="score">
  			<map>
  				<entry key="  ">
  					<value>81</value>
  				</entry>
  				<entry key="  ">
  					<value>89</value>
  				</entry>
  				<entry key="  ">
  					<value>82</value>
  				</entry>
  			</map>
  		</property>
  		
  		<property name="health">
  			<props>
  				<prop key="  ">  </prop>
  				<prop key="  ">175</prop>
  			</props>
  		</property>
  		
  		<property name="tools">
  			<set>
  				<value>     </value>
  				<bean class="com.test.ConcreteToolA"></bean>
  				<ref local="toolA"/>
  			</set>
  		</property>
  	</bean>
</beans>




 
テストクラスCient
package com.test;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Client {
	public static void main(String[] args) {
		ClassPathResource cpr = new ClassPathResource("applicationContext.xml");
		XmlBeanFactory factory = new XmlBeanFactory(cpr);
		Person person = (Person) factory.getBean("chinese");
		person.test();
	}
}
 
印刷された結果
[  ,   ,   ]
{  =81,   =89,   =82}
{  =  ,   =175}
[     , com.test.ConcreteToolA@a1807c, com.test.ConcreteToolA@fa7e74]