Spring4(2)——IOC控制反转 (概念理解)

1.IOC控制反转的概念

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

2. IOC控制反转举例理解

  1. 实现功能:一个员工(张三)完成测试工作

    // 员工1实体:ZhangShang.java
    public class ZhangSan {
    
        public void test(){
            System.out.println("张三-测试程序");
        }
    }
    // 工作类:JavaWork.java
    public class JavaWork {
    
      public void doTest(){
        ZhangSan zhangsan=new ZhangSan();
        zhangsan.test();
      }
    }
    // 主管测试类:Test.java
    public class Test {
    
        public static void main(String[] args) {
            JavaWork javaWork=new JavaWork();
            javaWork.doTest();
        }
    }
     
      
    注:此时“测试工作”和“张三员工”完全耦合在一起,如若需要其它人做“测试工作”,那么 javaWork.doTest 方法里面的内容全部要修改,
    这时我们可以利用 IOC 的设计思路将控制权反转,将某个人执行这种工作的控制权转交给主管。
    .
  2. 实现功能:将控制权转交给主管

    // Tester.java 接口
    public interface Tester {
    
        public void test();
    }
    
    // 员工1实体:ZhangSan.java 实现 Tester 接口
    public class ZhangSan implements Tester{
    
        public void test(){
            System.out.println("张三-测试程序");
        }
    }
    
    // 员工2实体:LiSi.java 同样实现 Tester 接口
    public class Lisi implements Tester{
    
        public void test(){
            System.out.println("李四-测试程序");
        }
    }
    // 工作类:JavaWork.java
    public class JavaWork {
        
        private Tester tester;   //配置beans.xml 文件中的属性时,name值要和声明值完全对应
        
        public void setTester(Tester tester) {
            this.tester = tester;
        }
    
        public void doTest(){
            tester.test();
        }
    }
    // 主管测试类:Test.java
    public class Test {
    
        public static void main(String[] args) {
            JavaWork javaWork=new JavaWork();
            javaWork.setTester(new ZhangSan()); //只需要修改这里的实例化对象就可选择不同的员工来实现工作
            javaWork.doTest();
        }
    }
  3. 利用Spring 来管理

    <!-- beans.xml 配置 -->
    <bean id="zhangsan" class="com.java1234.service.ZhangSan"></bean>
    <bean id="lisi" class="com.java1234.service.Lisi"></bean>
    
    <bean id="javaWork" class="com.java1234.service.JavaWork">
        <property name="tester" ref="lisi"></property>
      <!-- 依赖注入,利用java的反射机制.设置 tester 的值引用为 lisi,其中name的值要和类里面声明的值完全对应 --> </bean>
    // 在2的基础上修改:主管测试类:Test2.java
    
    public class Test2 {
    
        public static void main(String[] args) {
            ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml"); 
            JavaWork javaWork=(JavaWork)ac.getBean("javaWork");
            javaWork.doTest();
        }
    }

猜你喜欢

转载自www.cnblogs.com/Cocoomg/p/9824220.html
今日推荐