Spring学习笔记(二)IOC详解

来源:互联网 发布:网络牛牛赌博几率 编辑:程序博客网 时间:2024/05/29 13:22

一:spring ioc 简介

            IOC(控制反转:Inverse of Control ),又称作依赖注入,是一种重要的面向对象编程的法则来削减计算机程
      序的耦合问题,也是轻量级的Spring 框架的核心

二:spring ioc 实例讲解

    假设某公司有个项目需要一个人来做,该项目就是Work类,项目的负责人让张三来做这个工作。

 
Work类

    

public class Work {public void work(){ZhangSan z=new ZhangSan();z.doWork();}}
public class ZhangSan {public void doWork(){System.out.println("张三在工作");}}

public class Test {public static void main(String[] args) {Work w=new Work();w.work();}}
  此时工作能够正常的顺利进行,但是负责人突然要求换人,不让张三在做了,而是让李四负责这个工作,此时我们就要修改Work类的代码,而如果完成这个项目的过程中一直在换人的话我们就需要一直改Work的代码,这样会使得工程变得复杂,费时费力,那是因为  Work类 和完成这个Work的人紧紧的耦合在一起,当需要换人时,Work类也会跟着改变,这时候我们就需要解耦和(这也是设计模式中的设计原则:将不变的事物与会发生改变的事物分离开).

    我们将代码修改如下:

   首先创建一个Worker接口,要接手这个工作的人都必须实现这个接口

public interface Worker {public void doWork();}

public class ZhangSan implements Worker{public void doWork(){System.out.println("张三在工作");}}

public class LiSi implements Worker{public void doWork(){System.out.println("李四在工作");}}

修改后的Work类,利用了多态的性质,此时的Work类并不需要知道是谁在工作。

public class Work {private Worker worker;public void setWorker(Worker worker){this.worker=worker;}public void work(){worker.doWork();}}

public class Test {public static void main(String[] args) {ZhangSan zs=new ZhangSan();LiSi ls=new LiSi();Work wk=new Work();//让张三来工作wk.setWorker(zs);wk.work();//让李四来工作wk.setWorker(ls);wk.work();}}
    这就成功的将耦合解开,换人工作的时候我们不需要再改动Work类的代码。

    那么我们如何用Spring来完成这项工作呢?

   很简单,首先在xml文件里进行配置

<bean name="zs" class="com.zhu.test.ZhangSan"></bean><bean name="ls" class="com.zhu.test.LiSi"></bean><bean name="work" class="com.zhu.test.Work">    //这里的name属性值一定要与Work类里的worker一样   此时是张三在工作,当需要李四工作的时候只需要将 ref属性值改为 ls 即可   <property name="worker" ref="zs">  </property></bean>
public class Test {public static void main(String[] args) {ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");Work work=(Work)ac.getBean("work");work.work();}}



原创粉丝点击