Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用。这一章先从Spring的IoC开始。所谓IoC就是一个用XML来定义生成对象的模式,我们看看如果来使用的。
数据模型
1、如下图所示有三个类,Human(人类)是接口,Chinese(中国人)是一个子类,American(美国人)是另外一个子类。
源代码如下:
packagecn.com.chengang.spring;
publicinterfaceHuman{
voideat();
voidwalk();
}
packagecn.com.chengang.spring;
publicclassChineseimplementsHuman{
/*(非Javadoc)
*@seecn.com.chengang.spring.Human#eat()
*/
publicvoideat(){
System.out.println("中国人对吃很有一套");
}
/*(非Javadoc)
*@seecn.com.chengang.spring.Human#walk()
*/
publicvoidwalk(){
System.out.println("中国人行如飞");
}
}
packagecn.com.chengang.spring;
publicclassAmericanimplementsHuman{
/*(非Javadoc)
*@seecn.com.chengang.spring.Human#eat()
*/
publicvoideat(){
System.out.println("美国人主要以面包为主");
}
/*(非Javadoc)
*@seecn.com.chengang.spring.Human#walk()
*/
publicvoidwalk(){
System.out.println("美国人以车代步,有四肢退化的趋势");
}
}
2、对以上对象采用工厂模式的用法如下
创建一个工厂类Factory,如下。这个工厂类里定义了两个字符串常量,所标识不同的人种。getHuman方法根据传入参数的字串,来判断要生成什么样的人种。
packagecn.com.chengang.spring;
publicclassFactory{
publicfinalstaticStringCHINESE="Chinese";
publicfinalstaticStringAMERICAN="American";
publicHumangetHuman(Stringethnic){
if(ethnic.equals(CHINESE))
returnnewChinese();
elseif(ethnic.equals(AMERICAN))
returnnewAmerican();
else
thrownewIllegalArgumentException("参数(人种)错误");
}
}
下面是一个测试的程序,使用工厂方法来得到了不同的“人种对象”,并执行相应的方法。
packagecn.com.chengang.spring;
publicclassClientTest{
publicstaticvoidmain(String[]args){
Humanhuman=null;
human=newFactory().getHuman(Factory.CHINESE);
human.eat();
human.walk();
human=newFactory().getHuman(Factory.AMERICAN);
human.eat();
human.walk();
}
}
控制台的打印结果如下:
3、采用Spring的IoC的用法如下:
在项目根目录下创建一个bean.xml文件
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springFramework.org/dtd/spring-beans.dtd">
<beans>
<beanid="Chinese"class="cn.com.chengang.spring.Chinese"/>
<beanid="American"class="cn.com.chengang.spring.American"/>
</beans>
bean.xml的位置如下图,注意不要看花眼把它看成是lib目录下的了,它是在myspring目录下的。
修改ClientTest程序如下:
packagecn.com.chengang.spring;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.FileSystemXmlApplicationContext;