冷雨在线
EasyJWEB,JavaScript,Spring,JPA,MySql
半路出家,现在混JAVA.
我的首页
文章
相册
圈子
留言
管理
 
    当前所在页面:首页>>文章>>初识Spring之IOC
初识Spring之IOC
    作者:小雨 来源: 发表时间:2007-12-20

 
 

       学习过Spring的朋友都知道,Spring的核心就是一个容器,它实现了IOC的概念,可以协助管理各个对象的生命周期,以及对象之间的依赖关系。在核心容器的使用上,熟悉BeanFactory与ApplicationContext的运用是了解Spring的重点所在。所谓IoC就是一个用XML来定义生成对象的模式,个人大体有一点的理解就是假设对象之间存在依赖关系时,则被依赖对象会主动去找依赖对象,也就是所谓的变被动为主动。对象需要什么,我就会给你提供什么并主动找上门来,还有就是通过XML配置文件配置bean,也就是通过对bean的配置来配置各个对象之间的关系结构,不知道我理解正确了没。
这里简单的以一个实例实现来看看Spring的IOC是如何帮助我们管理对象的。
首先建立数据模型:
接口类:Chinese(中国人)
实现此接口的子类:ChongQing(重庆)
实现此接口的子类:ChengDu(成都)
数据模型图:

    源代码如下:


Chinese.java
package com.easyjf.SpringIOC;

/**
 * 中国人
 * 
 * 
@author 冷雨 http://www.easyjf.com
 * 
 
*/

public interface Chinese {
 
/**
  * 到不同的城市去旅游
  
*/

 
void tour();
}

ChongQing.java
package com.easyjf.SpringIOC;

/**
 * 重庆
 * 
 * 
@author 冷雨 http://www.easyjf.com
 * 
 
*/

public class ChongQing implements Chinese {

 
public void tour() {
  System.out.println(
"重庆火锅好好吃哟!PLMM也多.");
 }

}



ChengDu.java
package com.easyjf.SpringIOC;

/**
 * 成都
 * 
 * 
@author 冷雨 http://www.easyjf.com
 * 
 
*/

public class ChengDu implements Chinese {

 
public void tour() {
  System.out.println(
"成都的高楼没重庆的多,不过到处都是茶馆。");
 }


}

      现在再在项目的classpath下创建一个maowei.xml配置文件位置如下图,注意不要看花眼把它看成com.easyjf.SpringIOC目录下了,其实它是与com.easyjf.SpringIOC目录同级别的。
 
           maowei.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="ChengDu" class="com.easyjf.SpringIOC.ChengDu" />
 
<bean id="ChongQing" class="com.easyjf.SpringIOC.ChongQing" />
beans>

          好了,现在再建立一个测试类SpringDemo.java内容为: 


package com.easyjf.SpringIOC;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * 测试BEAN
 * 
 * 
@author 冷雨 http://www.easyjf.com
 * 
 
*/

public class SpringDemo {
 
public static void main(String[] args) {
  
// 使用此方式加载XML文件,默认会到项目的根目录下去查找该文件
  
// ApplicationContext context = new FileSystemXmlApplicationContext(
  
// "maowei.xml");

  
// 使用此方式加载XML文件,默认会到项目的classpath根目录下去查找该文件
  ApplicationContext context = new ClassPathXmlApplicationContext(
    
"maowei.xml");
  Chinese cq 
= (Chinese) context.getBean("ChongQing");
  cq.tour();
  System.out.println(
"-----------------");
Chinese cd 
= (Chinese) context.getBean("ChengDu");
  cd.tour();
 }

}

        执行结果如下:


      再回头看原来的maowei.xml文件的这一句:

<bean id="ChongQing" class="com.easyjf.SpringIOC.ChongQing" />

       id就是context.getBean的参数值,一个字符串。class就是一个类(包名+类名)。然后在SpringDemo类里获得ChongQing对象的就是这么一句。

Chinese cq = (Chinese) context.getBean("ChongQing");

      因为getBean方法返回的是Object类型,所以前面要加一个类型转换。

总结:
        也许有朋友会想,本来是很简单的一件事,为什么要搞得看起这么复杂呢。直接通过工厂模式还不需要配置就可以搞定这一切,IOC看起反而还麻烦多了。
是的,也许这只是一个小的项目,但好好想想,IOC这样做了自少我觉得有两大好处:
大大降低了程序的耦合度。
2.举个例子,如果用户需求发生变化,要把ChongQing类修改一下。如果使用工厂模式,就要更改Factory类的方法,并且重新编译布署。而IoC只需要将class属性改变一下,并且由于IoC利用了Java反射机制,这些对象是动态生成的,这时我们就可以热插拨ChongQing对象(不必把原程序停止下来重新编译布署)

        在spring中,IOC容器的实际代表就是BeanFactory,IOC容器负责载入在配置元数据中描述的bean,并对bean进行管理
        Spring的中IOC容器是为程序员管理Bean而设立的,但是Bean是如何创建,它们的生存周期是什么样子的,他们的作用域分别是什么呢? 在这里就不长篇大论,不过推荐初学Spring的朋友大家看看《Spring技术手册》这本书,或到http://www.easyjf.com这个站上去收集资料。 

 
 

(阅读 )   评论数(:27)
评论】 【收藏】
评论:共27条
楼猪,既然接口是人(中国人),那么实现类应该是重庆人和成都人撒!^_^
评论人: 天一     评论时间: 2007-12-20 22:13:41
评论人: s     评论时间: 2007-12-21 01:18:45
呵呵,PLMM要放在火锅前!
评论人: erikchang     评论时间: 2007-12-21 17:58:40
评论人: ...     评论时间: 2008-02-24 07:02:22
评论人: ...     评论时间: 2008-02-25 00:32:57
评论人: ...     评论时间: 2008-02-25 09:38:55
评论人: ...     评论时间: 2008-02-25 17:59:47
评论人: ...     评论时间: 2008-02-26 01:52:03
评论人: ...     评论时间: 2008-02-26 09:32:44
评论人: ...     评论时间: 2008-02-26 17:04:11
评论人: ...     评论时间: 2008-02-27 00:08:54
评论人: ...     评论时间: 2008-02-27 07:11:04
评论人: ...     评论时间: 2008-02-27 14:14:45
评论人: ...     评论时间: 2008-02-27 21:02:10
评论人: ...     评论时间: 2008-03-04 07:23:47
评论人: ...     评论时间: 2008-03-04 22:27:24
评论人: ...     评论时间: 2008-03-05 12:47:02
评论人: ...     评论时间: 2008-03-05 12:48:02
评论人: ...     评论时间: 2008-03-06 04:33:55
评论人: ...     评论时间: 2008-03-06 20:54:20
评论人: ...     评论时间: 2008-03-06 20:55:06
评论人: ...     评论时间: 2008-03-07 08:11:46
评论人: ...     评论时间: 2008-03-07 17:29:49
评论人: ...     评论时间: 2008-03-08 02:26:51
评论人: ...     评论时间: 2008-03-08 02:27:41
评论人: ...     评论时间: 2008-03-08 10:45:38
评论人: ...     评论时间: 2008-03-08 10:47:30

发表评论:
发表人:
评论: 
    
 
关于我们 | 诚聘英才 | 联系我们 | 广告业务 | 网站地图 | 法律声明

EasyJF开源团队版权所有  建议使用1024*768分辨率