1.1 SpringIoC探究--初识IOC

初识IOC

一、Java Web发展史

1、第一阶段:JavaBean + Servlet + JSP 逐步发展;

2、第二阶段:面对EJB重量级框架带来的种种麻烦;

3、第三阶段:SpeingMVC/Structs + Spring + Hibernate/myBatis;

4、第四阶段:享受SpringBoot“约定大于配置”的乐趣;

5、以Dubbo为代表的SOA微服务架构体系;

6、SpringCloud微服务架构技术生态圈;

二、IoC概念

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI)

1)控制什么?

控制JavaBean对象的创建及销毁【即生命周期】

2)反转什么?

将JavaBean对象的控制权交给IoC容器【没有IoC,被依赖对象的控制权在依赖它对象处,反转就是将控制权交给IoC】

举例:人【zhangsan/Lisi】开车【Audi/Buick】回家

车:Audi.java

package com.imooc.spring.ioc.class02.stage1;

public class Audi {

    public void start() {
        System.out.println(this.getClass().getSimpleName() + ": 出发!!!");
    }

    public void turnLeft() {
        System.out.println(this.getClass().getSimpleName() + ": 左转!!!");
    }

    public void turnRight() {
        System.out.println(this.getClass().getSimpleName() + ": 右转!!!");
    }

    public void stop() {
        System.out.println(this.getClass().getSimpleName() + ": 到达!!!");
    }

}

人 Zhangsan.java

package com.imooc.spring.ioc.class02.stage1;

public class ZhangSan {

    public void backHome() {
        Audi audi = new Audi();      //创建车辆
        audi.start();                //控制车启动
        audi.turnLeft();            //控制车左转
        audi.turnRight();           //控制车右转
        audi.stop();                //控制车停止
    }

    public void gotoWork() {
        Audi audi = new Audi();
        audi.start();
        audi.turnRight();
        audi.turnLeft();
        audi.stop();
    }

    public void gotoBuy() {
        Audi audi = new Audi();
        audi.start();
        audi.stop();
    }

}

zhangsan不仅要backhome、还要gotoWork、gotoBuy,如果zhangsan换车【Audi变为Buick则所有的都需要换

上述代码存在问题:

1)高耦合性:zhangsan所有的行为都需要自己主动创建并销毁一辆车;

2)更换车辆代价巨大;

改进方法:将Audi这辆车提到Zhangsan的属性域里面,更换车辆只需将Audi 换为Buick

package com.imooc.spring.ioc.class02.stage2;

public class ZhangSan {

        private Audi audi = new Audi();     //换车 private Buick audi = new Buick();下面不动

    public void backHome() {
        audi.start();
        audi.turnLeft();
        audi.turnRight();
        audi.stop();
    }

    public void gotoWork() {
        audi.start();
        audi.turnRight();
        audi.turnLeft();
        audi.stop();
    }

    public void gotoBuy() {
        audi.start();
        audi.stop();
    }

}

上述代码还存在问题:

1)zhangsan只是需要一辆车,与Audi或Buick无关;

2)车辆不应该由zhangsan创建

针对(1),解决方法--抽象出一个接口:car

package com.imooc.spring.ioc.class03.car;

public interface Car {

    void start();

    void stop();

    void turnLeft();

    void turnRight();

}

让Audi和Buick实现该接口

Audi:
package com.imooc.spring.ioc.class02.car;

public class Audi implements Car{

    public void start() {
        System.out.println(this.getClass().getSimpleName() + ": 出发 !!!");
    }

    public void stop() {
        System.out.println(this.getClass().getSimpleName() + ": 到达 !!!");
    }

    public void turnLeft() {
        System.out.println(this.getClass().getSimpleName() + ": 左转 !!!");
    }

    public void turnRight() {
        System.out.println(this.getClass().getSimpleName() + ": 右转 !!!");
    }
}
Buick:
package com.imooc.spring.ioc.class03.car;

public class Buick implements Car{

    public void start() {
        System.out.println(this.getClass().getSimpleName() + ": 出发 !!!");
    }

    public void stop() {
        System.out.println(this.getClass().getSimpleName() + ": 到达 !!!");
    }

    public void turnLeft() {
        System.out.println(this.getClass().getSimpleName() + ": 左转 !!!");
    }

    public void turnRight() {
        System.out.println(this.getClass().getSimpleName() + ": 右转 !!!");
    }
}

针对(2),解决方法--构造函数传递car

package com.imooc.spring.ioc.class02.stage3;

public class ZhangSan {

    private Car car;
    public ZhangSan(Car car){
        this.car = car;
    }

    public void backHome() {
        car.start();
        car.turnLeft();
        car.turnRight();
        car.stop();
    }

    public void gotoWork() {
        car.start();
        car.turnRight();
        car.turnLeft();
        car.stop();
    }

    public void gotoBuy() {
        car.start();
        car.stop();
    }

}

car由谁创建呢?--IoC容器来创建

————————————————————————————————————————————

内容来源---《Spring框架小白的蜕变》---源码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值