スプリング(1):スプリング入門、IOC紹介
9673 ワード
http://mynote.iteye.com/admin/blogs/1174520
まず上のこの簡単な工場の例を見てください。
springのIOCは簡単な工場と似ています。クライアントのために例を生成します。上の簡単な工場をspringに変えて実現します。以下の通りです。
Personインターフェース
Chinese
American
appication Contect.xmlプロファイル
テストクラス
さようなら。lisi
もう一つの例を見ます。
Personインターフェース
Toolインターフェース
具体類:Chinese
具体的なツールA
springプロファイルは、chineseのbeanでCocrete ToolAを引用した例が見られます。
印刷結果:ドconcrete tool a
もう一つの例を見てください。springプロファイルで属性を設定できる値です。
Greeeting Serviceインターフェース
具体的な実現クラス
springプロファイル
テストクラス
クラスの属性が配列タイプの場合、どう処理しますか?次の例を見ます
インターフェースクラス
具体的な種類のPersonは、多くの集合タイプを定義しています。
springプロファイルに値を割り当てます。
テストクラスCient
印刷された結果
まず上のこの簡単な工場の例を見てください。
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]