初识Spring之IOC

       学习过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这个站上去收集资料。 

      新手第一次学写日志,就当写笔记吧.希望能说说指点一下.谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值