当前位置: 代码迷 >> J2EE >> 一个简略的Spring例子:郑阿奇《Java EE 实用教程》
  详细解决方案

一个简略的Spring例子:郑阿奇《Java EE 实用教程》

热度:171   发布时间:2016-04-22 00:54:48.0
一个简单的Spring例子:郑阿奇《Java EE 实用教程》
    这两天看郑阿奇主编的一本书《Java EE 实用教程》的Spring章节,依照书上的例子比葫芦画瓢写一个程序, 一个例子居然弄了两天才算运行成功,期间运行时错误频出,每次都要上网找好久的答案。有有感于此,故把写好的代码放在此处,希望对大家有所帮助。

运行环境: JDK版本:1.6
           Eclipse版本:GALILEO
           Spring版本:spring-framework-3.0.5.RELEASE

步骤:

    新建一个Java Project,名称为Spring_DI,为其添加Spring核心类库,添加commons-logging-1.1.1.jar。

    创建包“org.interface”,在该包中新建Person接口,代码如下:
package org.interfaces;//定义person接口public interface Person {    //接口中定义一个吃食物的方法    public void eatFood();}


    继续在该包中定义Food接口,代码如下:
package org.interfaces;//定义Food接口public interface Food {    //在接口中定义一个吃的方法,返回吃东西    public String eat();}


    创建包“org.interfaces.impl”,在该包中定义Person的实现类Man,代码如下:
package org.interfaces.impl;import org.interfaces.Food;import org.interfaces.Person;    //person 接口的具体实现类public class Man implements Person {        //定义Food接口私有属性,面向Food接口编程,而不是具体实现类。    private Food food;	    //构建setter方法    public void setFood(Food food){	this.food=food;    }    //实现Person接口eatFood方法    public void eatFood(){	System.out.println(food.eat());    }}


    定义Food的一个实现类Apple,代码如下:
package org.interfaces.impl;import org.interfaces.Food;public class Apple implements Food {    public String eat(){	return "正在吃苹果……";    }}


    定义Food的一个实现类Orange,代码如下:
package org.interfaces.impl;import org.interfaces.Food;public class Orange implements Food {    public String eat(){	return "正在吃橘子……";    }}


    在项目文件夹下编写Spring的配置文件config.xml,使用Spring的配置文件将Person实例和Food实例组织在一起,配置内容如下:
<?xml version="1.0" encoding="UTF-8"?><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-2.0.xsd">      <!--定义一个bean,该bean的id是man,class指定该bean实例的实现类。  -->    <bean id="man" class="org.interfaces.impl.Man">        <property name="food">            <ref local="apple"/>        </property>    </bean>        <!-- 定义apple bean,Food接口的实现类 -->    <bean id="apple" class="org.interfaces.impl.Apple"></bean>    <bean id="orange" class="org.interfaces.impl.Orange"></bean></beans>


    下面就可以编写测试类了,代码如下:
package org.test;import org.interfaces.Person;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;public class Test {	    public static void main(String[] args) {			//创建Application对象,参数为配置文件放置的位置	ApplicationContext context=	    new FileSystemXmlApplicationContext("config.xml");	//通过Person bean的id来获取bean实例,面向接口编程,因此此处强制类型转换为        //接口类型	    Person p=(Person)context.getBean("man");	    p.eatFood();    }}


    运行主程序,输出结果显示如下:


    修改配置文件config.xml,
<bean id="man" class="org.interfaces.impl.Man">    <property name="food">        <ref local="orange"/>    </property></bean>


    再次运行主程序,结果显示如下:
正在吃橘子……

1 楼 sikla 2011-02-27  
顺便说明一下:本文的目的是为了与各位同行交流编程经验,对书的质量本身并无恶意!
  相关解决方案