Spring-IoC

Spring的介绍

框架:大佬把一些基本操作进行封装;就好比自定义http服务器封装性很差劲;所以我们就使用servlet;这也是一个框架。Servlet到Spring如同骑几十年自行车的你;突然发现还有电瓶车这种好东西。

spring:包含众多工具和方法的IoC容器。
IoC容器:Inversion of Control;控制反转的容器。spring是一个控制反转的容器。
举例:什么是控制反转
比如A程序依赖B程序;那么A就控制着B程序的生命周期;我们在创建A的时候就得实现B;然后如果B发送改变后;比如参数变化;那我A的程序也得跟着变化。耦合高了。
实现一个生产汽车的示例:

public class Car {
public  void init(){

    System.out.println("do car");
    //  车的使用要依赖车身
    Framework framework=new Framework();
    framework.init();
}

    public static void main(String[] args) {
        Car car=new Car();
        // 新建一个车 ;使用这个车
        car.init();

    }
}

 class Framework {
    public void init(){

        System.out.println("do Framework");
//    车身的使用要依赖底部
        Bottom bottom=new Bottom();
        bottom.init();

    }


}

 class Bottom {
    public void init() {
        System.out.println("do Bottom");
// 底部的使用要依赖车轮
        Tire tire=new Tire();
        tire.init();
    }



}


class Tire {
    public int size=17;
    //  车轮的长度只能固定
    public void  init(){

        System.out.println("size->"+size);
    }


}

这个示例的依赖关系非常紧密;当我们想在不同场景使用不同尺寸轮胎;那就挺难办的。Tire的init方法加个参数size;那这个参数来自用户;就得经过车、车身、车底把这参数传过来。我们四个类的代码都要修改。如果还有车的颜色、大小等等属性我们自己去控制这些依赖就很难办。
IoC:转移控制权。生命周期就变成别人的;控制权反转。

package newcar;

public class Car {
    public Framework framework;
    public Car(Framework framework){
        this.framework=framework;

    }
    public void init() {
        System.out.println("do car...");
        framework.init();
    }
}

class Framework {
    public Bottom bottom;
    public Framework(Bottom bottom) {
        this.bottom = bottom;
    }

    public void init() {
        System.out.println("do framework...");
        bottom.init();
    }
}

class Bottom {
    private Tire tire;

    public Bottom(Tire tire) {
        this.tire = tire;
    }

    public void init() {
        System.out.println("do bottom...");
        tire.init();
    }
}

class Tire {
    private int size = 17;
    private String color = "红色";

    public Tire(int size, String color) {
        this.size = size;
    }

    public void init() {
        System.out.println("size -> " + size + " | color -> " + color);
    }
}

修改后的代码以参数的形式拿到它的依赖类;很好的实现解耦。

在这里插入图片描述
如果是spring框架;依赖生命周期等的管理就交给第三方;IoC的用途是解耦;但不局限于。IoC是一种思想;把控制权交给别人管理。
传统的建车:先建车;发现要依赖车身;那就建车身;依赖车底建车底;依赖车轮就建车轮。
IoC的思想:先建好车轮(想要什么尺寸就建什么尺寸)再建车底;车身;车。

容器:
spring这个Ioc容器的作用:将对象存和取;bean对象;类对象。对象的创建和销毁都交给spring;这个容器也有储存和获取对象的能力。
解耦的同时还能提高效率;就跟要的工具我已经事先储存在容器里;而不是要用的时候才创建。还能帮你解决死锁;循环依赖的问题。
(让我们更偏向使用权;而不是拥有权;比如共享汽车。我不需要关注;保养;年新;保险;停在哪;轮胎不行;或者机油;刹车油不行都得换等等;停车费也不便宜;很多麻烦事。停车费。而租车;啥都不用管;还有专门停放共享汽车的地。)

总结:spring Ioc优点
1:解耦
2:使用更加方便(比如我要车身;你给我给车身我就能造车;不需要关注后面的依赖情况)
3:高效;默认单例;跟线程池一样;只创建一次。除了第一次;事先创建好;后面就可以直接使用;而不是要用的时候再创建。

DI

DI:依赖注入;将依赖的某个对象拿到当前类当中(底层是先是动态代理;动态代理底层是反射)
IoC相当于是一种思想;而DI是一种具体的实现;DI是一种主动获取对象的方式。传参数;被动的;得别人传给你;你才能接收。主动是我自己主动获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20计科-廖雨旺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值