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

Posted cocoomg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring4——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();
        }
    }



以上是关于Spring4——IOC控制反转 (概念理解)的主要内容,如果未能解决你的问题,请参考以下文章

PHP依赖注入,控制反转,反射Ioc容器和服务提供者各个概念的理解和使用

IOC控制反转解释(java)

spring------控制反转(IOC)/依赖注入(DI)

Spring IoC

Spring4- 01 - Spring框架简介及官方压缩包目录介绍- Spring IoC 的概念 - Spring hello world环境搭建

依赖注入(DI)和控制反转(IOC)