走进IOC第一章

1 篇文章 0 订阅
1 篇文章 0 订阅

世间万物都有因果,任何事情都不会平白无故的出现或消失。
那么首先谈一谈ioc为何出现?
简单的说就是因为面向对象编程会造成对象与对象之间的耦合,
IOC的出现就是为了解决对象之间的耦合——“解耦”。
简单介绍一下IOC
IOC(Inversion of Control)翻译为“控制反转”。

为何叫控制反转?

比如:
两个对象,对象A和对象B,对象A依赖对象B,在初始化A时,需要主动去创建对象B,控制权在自己手上。
引入IOC容器后,所以的对象由IOC容器创建,对象A和对象B失去了直接联系,解耦,在初始化A的时候,IOC容器会主动创建B注入到A需要的地方。
在对象A获得依赖对象B的时候,主动创建行为变成了被动,所以叫控制反转。

IOC还有个小名交DI(Dependency Injection)

依赖注入

DI这个名字是由IOC分析得来的。既发生控制反转之后,对象A获得依赖对象B的方式由自身创建变成了由IOC容器主动去注入,于是IOC就有了这个别名——依赖注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
再比如上面的例子:对象A依赖于对象B,当对象 A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办(工厂设计模式)。

IOC依赖的技术关键:反射
反射通俗来讲就是根据给出的类名(字符串方式)来动态地生成对象,(如今反射技术得到了很大的发展,反射生成对象的方式与正常生成对象的方式速度上的差别已经没有多少了)
有没有觉得IOC很像工厂模式中的工厂,可以粗略的把IOC看成一个工厂,工厂生成对象所需的内容都在配置文件中定义,然后用反射读取配置文件生成对象。IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

实现一个IoC(Inversion of Control,控制反转)容器通常涉及到以下几个步骤,以简单版本为例,我们可以考虑使用Java的反射机制来创建并管理对象依赖: 1. **注册组件**:首先,你需要定义一组对象或接口,以及它们的具体实现。这些可以视为"组件",并在容器中注册。例如,定义一个`Car`接口,然后提供`Toyota`和`Honda`两个具体的实现。 ```java interface Car { void drive(); } class Toyota implements Car { @Override public void drive() { System.out.println("Driving a Toyota."); } } class Honda implements Car { @Override public void drive() { System.out.println("Driving a Honda."); } } ``` 2. **配置**:创建一个映射表或者配置信息,描述哪些组件应该依赖于其他组件。这可以是硬编码,也可以来自外部配置如XML或JSON文件。 ```java Map<String, Car> carFactories = new HashMap<>(); carFactories.put("Toyota", new Toyota()); carFactories.put("Honda", new Honda()); ``` 3. **获取组件**:当需要使用某个组件时,从容器中查找并返回其对应的实现。你可以使用工厂方法或者直接通过接口名获取。 ```java public class Container { private Map<String, Car> factories; public Car getCar(String brand) { return factories.get(brand); } // 使用时,实例化Container并调用getCar方法 public static void main(String[] args) { Container container = new Container(); Car myCar = container.getCar("Toyota"); myCar.drive(); // 输出 "Driving a Toyota." } } ``` 这就是一个非常基础IoC容器实现。在实际生产环境中,像Spring这样的成熟框架会处理更多的细节,包括自动装配、生命周期管理和性能优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值