Spring5(2)——IOC详解

目录

 

1,简介;

2,使用Spring如何管理bean;


1,简介;

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

 下面用实例讲一下,什么叫控制反转。

我们定义一个ZhangSan类:

package com.java.service;

public class ZhangSan{

    public void test(){
        System.out.println("张三-测试员");
    }
}

再定义一个JavaWork类,包含Zhangsan类:

package com.java.service;

public class JavaWork {

    public void dopost(){
        ZhangSan zs=new ZhangSan();
        zs.test();
    }
}

最后测试类:

package com.java.test;

import com.java.service.JavaWork;

public class Test {
    /**
     * 总业务执行
     * @param args
     */
    public static void main(String[] args) {
        JavaWork jw=new JavaWork();
        jw.dopost();
    }
}

运行结果:

这是一个简单的类调用方法,但是这个JavaWork和人ZhangSan是完全耦合在一起的;

如果说我还有另外一个人也要参加测试,那么只能在JavaWork里面进行再次修改代码;

另外建立一个lisi类;

package com.java.service;

public class LiSi{

    public void test(){
        System.out.println("李四-测试员");
    }
}

当要lisi做测试时,只能在JavaWork里面继续进行修改代码:

package com.java.service;

public class JavaWork {

    public void dopost(){
        LiSi ls=new LiSi();
        ls.test();
    }
}

测试类代码不变:

package com.java.test;

import com.java.service.JavaWork;

public class Test {
    /**
     * 总业务执行
     * @param args
     */
    public static void main(String[] args) {
        JavaWork jw=new JavaWork();
        jw.dopost();
    }
}

结果:

分析一下,这样修改会改变很多代码,执行效率不高;

我们怎么样能修改一下这种实现的方式,让代码效率更高呢?

 我们先来定义一个接口:

package com.java.service;

public interface Tester {
    public void test();
}

并且让所有参与测试的人员都实现这个接口:

package com.java.service;

public class ZhangSan implements Tester{

    public void test(){
        System.out.println("张三-测试员");
    }
}

 在JavaWork里面定义一个测试对象tester;

package com.java.service;

public class JavaWork {

    private Tester tester;

    public void setTester(Tester tester) {
        this.tester = tester;
    }

    public void dopost(){
        tester.test();
    }
}

这样我们在最终的测试类里面,把张三这个对象传入进去;

package com.java.test;

import com.java.service.JavaWork;
import com.java.service.ZhangSan;

public class Test {
    /**
     * 总业务执行
     * @param args
     */
    public static void main(String[] args) {
        JavaWork jw=new JavaWork();
        jw.setTester(new ZhangSan());
        jw.dopost();
    }
}

运行结果:

这样就实现了控制反转!

控制权在我们自己传入的对象里面,也就是在自己手里

2,使用Spring如何管理bean;

我们先在bean.xml配置文件里面写几个bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="zhangSan" class="com.java.service.ZhangSan"></bean>

    <bean id="lisi" class="com.java.service.LiSi"></bean>

    <bean id="javaWork" class="com.java.service.JavaWork">
        <property name="tester" ref="zhangSan"></property>
    </bean>

</beans>

另外的测试类:

注意这里的bean里面的id就是bean.xml配置文件的javaWork

package com.java.test;

import com.java.service.JavaWork;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test2 {

    public static void main(String[] args) {
        //加载beans.xml配置文件
        ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
        //通过id来获取bean
        JavaWork javawork=(JavaWork) ac.getBean("javaWork");
        //执行方法
        javawork.dopost();
    }
}

运行结果:

如果想换成李四测试,那么直接修改bean.xml里面的ref值就可以了,简单方便!

欢迎关注我的微信公众号《程序员的时光》,感激不尽!

发布了295 篇原创文章 · 获赞 100 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_37084904/article/details/103278582
今日推荐