Spring 浅谈IOC

216 阅读2分钟

容器

  • 在Java当中 如果有一个类专门用来存放其它类的对象,这个类就叫做容器,或者就叫做集合,容器分为Set集、List列表、Map映射
  • web中,tomcat也是一个web容器 tomcat说的简单就是,去监听一个接口,去解析http登请求。。但是,如何初始化,如何去解析不同的协议,然后去调资源,这一步一步都是由各种设计模式,各种接口去规范化的调用的。。。。tomcat去统一管理你的各种类,保证他出现在该出现的地方

概述

  • 控制反转(Inverse Of Control)是一种设计思想,它的目的是指导我们设计出更加松耦合的程序。

  • 控制:在 java 中指的是对象的控制权限(创建、销毁)。

  • 反转:指的是对象控制权从由“开发者在类中手动控制”反转到由“ Spring 容器控制”。

对IOC的粗浅理解

代码

  • dao
public interface Car {
    void date();
}
class carA implements Car {
    @Override
    public void date() {
        System.out.println("carA.....");
    }
}//carB、carC,类似
  • service
public interface CarService {
    void getCar();
}
public class CarServiceImpl implements CarService {
    Car car =new carA();
    @Override
    public void getCar() {
         car.date();
    }
}
  • client
public class Client {
    public static void main(String[] args) {
        CarServiceImpl carService = new CarServiceImpl();
        carService.getCar();
    }
}

见解

  • 当我需要carB时,就去service层删除carA ,new 一个carB,要C也同理,当client(客户)多起来,一个要A,一个要B,一个要C。。。,改来改去麻烦死。
  • 你可能会说直接一次性把所有car都new出来。首先new关键字占资源不说,如果有100种车,你也写100 new吗?你可能说new不累,你new完还要写对应的方法,又是100个,所以说,极其的麻烦。

改进

只需要在service和client中更改:

public class CarServiceImpl implements CarService {
    private Car car;

    public void setCar(Car car) {
        this.car = car;
    }

    @Override
    public void getCar() {
         car.date();
    }
}

==================================================

public class Client {
    public static void main(String[] args) {
        CarServiceImpl carService = new CarServiceImpl();
        carService.setCar(new carB());//要什么车new什么车
        carService.getCar();
    }
}

控制new Car权限由service转向的client

再看看大佬怎么说