IOC给程序带来的好处
IOC(inversion of control)的中文解释是“控制反转”或者“依赖注入”,它的实现目的是:我们可以通过配置文件来控制程序的流程,达到程序代码的优化。初学者往往弄不清楚为什么我们可以通过“控制反转”或“依赖注入”来优化我们的代码。今天我想借这个机会说说我对IOC程序设计原则的认识,以及它是怎么样把我们的程序弄“活”的。
一、名词解释
首先我想说说我对“控制反转”和“依赖注入”的认识。
1、控制反转:
对于初学者来说,我们平时写代码,“一段代码会完全控制了程序的流程”,因为我们习惯于用new关键字来创建对象,再通过对象来调用它的方法。对于我们来说,这是再正常不过的了,可是如果此时我们的需求发生了一点改变,我们就不得不修改源代码,这就是我们常讲的“硬编码(hard-coding)”,而修改源代码是程序设计的大忌,这违反了程序设计的“开闭原则”,即对扩展是开放的,对修改是关闭的。
//代码示例:
public class Animal {
public void eat() {
System.out.println(" 动物 吃东西了!");
}
}
public class Pig extends Animal{
public void eat() {
System.out.println(" 小猪 吃东西了!");
}
}
public class Dog extends Animal {
public void eat() {
System.out.println(" 小狗 吃东西了!");
}
}
public class Project {
public static void main(String[] args) {
Animal pig = new Pig();
pig.eat();
}
}
当我们写完代码时,我们的程序只能执行小猪吃东西,可是如果此时需求要求我们要小狗吃东西,是不是我们的代码又要变了呢。此时我们引入了配置文件,我们事先在配置文件中已经配置好了该是谁吃东西,等到程序运行时,程序会读取配置文件中的值通过反射机制创建一个我们需要的对象,再调用它的eat方法就ok了。这样看来,我们程序的执行流程控制权是不是转交给了配置文件了呢,而程序代码自己却成了被控制的对象,这就是实现了“控制反转”了。
2、依赖注入:
在讲依赖注入之前,我想先讲一讲依赖注入的三种实现方式。
(1)构造注入, 是通过构造器方法注入实例变量
public class Car {
public void move(){
//••••
}
}
public class People {
private Car car;
public People(Car car) {//构造注入
this.car=car;
}
public void move(){
car.move();
}
}
(2)设值注入,是通过setter方法注入实例变量
public class People {
private Car car;
public People(Car car){//构造注入
this.car=car;
}
public void setCar(Car car) {//设置注入
this.car = car;
}
public void move(){
car.move();
}
}
(3)接口注入,是通过接口方法注入实例变量
public interface AbstractCar {
public void move();
}
public class Car {
public void move(){
System.out.println("车开了");
}
}
public interface AbstractPeople {
public void move();
}
public class People {
public void move(AbstractCar car){//接口注入
car.move();
}
}
问题思考:依赖注入有什么作用呢?
此时我们还无法回答这个问题,可是当我们考虑到配置文件时,我们就豁然开朗了,不管是哪种注入方法,目的都是给我们的程序传入一个实例变量。而这个实例变量我们可以事先在配置文件中配置,当程序运行时就可以读取配置文件,通过反射机制来创建所需的对象了,如果此时我们的需求发生了变化,我们也只需改一下配置文件就ok了。这里有些人可能会认为这也修改了文件呀,为什么修改配置文件就可以了呢。呵呵,其实配置文件是不需要编译的,我们可以随时修改配置文件,而不需要通过更改一行源代码的方法就实现了程序流程的控制。这就是ICO的妙处哦~
3、IOC容器
使用IOC后,我们不需要自己去创建某个类的实例,而由IOC容器去创建,当我们需要使用某个对象时,直接到容器中去获取就可以了。现在已经有许多非常优秀的IOC容器,比如spring等。
二、综合理解
最后我想用一个图来表示我对IOC的理解
分享到:
相关推荐
在实际应用中,使用Unity可以带来很多好处,如提高代码的可测试性(因为依赖可以通过构造函数参数进行模拟),增强代码的可维护性(减少硬编码的依赖),以及更好地遵循开闭原则(Open-Closed Principle)——对扩展...
**IOC(Inversion of Control)**,即控制反转,是软件设计模式中的一种核心概念,主要应用于依赖注入(Dependency Injection,DI)。...通过自定义IOC的实现,可以更深入地理解和运用这一概念,为日常开发带来便利。
结合IoC和DSM/DSL可以带来一种新的开发范式。IoC负责管理组件的生命周期和依赖关系,而DSM/DSL则用于描述业务逻辑。这种方式不仅可以降低耦合度,还能使代码更加清晰、易于维护。 ##### 1.2.3 IoC + DSM:一个框架...
【Spring 概述】 ...总的来说,Spring 框架通过其轻量级特性、IoC 和 AOP 等机制,为 Java 应用程序开发提供了一种高效、灵活且易于管理的解决方案。无论是服务器端应用还是其他类型的 Java 应用,都能从中受益。
使用 IOC 容器可以带来许多好处,例如: * 降低耦合度:IOC 容器可以将对象的创建和管理从应用程序中分离出来,使得应用程序更加灵活和可维护。 * 提高可重用性:IOC 容器可以使得对象更加模块化和可重用。 * 提高...
这个框架借鉴了Spring等成熟IoC(Inversion of Control,控制反转)框架的设计理念,旨在简化应用程序的开发过程,通过解耦组件之间的依赖关系,提高代码的可维护性和可测试性。 "源码"标签表明BlueSky-IOC不仅是一...
3. **智能化运营中心(IOC)**:建立运营管理指挥中心,集成桌面程序、浏览器、移动端和大屏幕监控,实现对周界、能源、通行、照明等多个领域的集中管控。 4. **AI与物联网技术**:利用IoT平台结合AI基础服务,实现...
在IT行业中,Spring框架是Java开发中的一个基石,它提供了丰富的功能来简化应用程序的构建,包括...Spring的IOC使得我们能更专注于业务逻辑,而Mybatis则让我们能更灵活地处理数据库交互,两者整合带来了极大的便利。
这样做带来的好处包括但不限于降低代码耦合度、提高可测试性以及简化配置等。 #### IoC与DI的关系 在IoC概念中,依赖注入(Dependency Injection, DI)是最常用的一种实现方式。DI允许开发者通过构造函数、setter...
在实际开发中,使用OpenNETCF.IoC库可以带来以下好处: - **提高可测试性**:通过解耦,可以更容易地编写单元测试,因为依赖可以被模拟或替换成测试双(Test Double)。 - **增强可维护性**:当修改或替换某个组件...
在当前信息技术日新月异的时代,AOP(面向切面编程)和IOC(控制反转)两种技术的应用,为MIS系统的开发带来了新的变革与提升。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让...
在实际项目中,使用IOC和DI可以带来以下好处: 1. **松耦合**:对象之间通过接口进行通信,降低了直接的依赖,增强了组件的独立性。 2. **易于测试**:由于依赖是通过参数注入的,因此在单元测试中,我们可以方便地...
下面我们将详细探讨Spring如何实现IoC以及它带来的好处。 ### 1. 控制反转(IoC)概念 控制反转是指应用程序不再直接创建和管理对象,而是由一个外部容器(如Spring框架)负责对象的创建和生命周期管理。这样,...
在压缩包的【子文件名称列表】中提到了"赚钱项目",但这个文件名与主题"Java进阶之SpringIoC"并不直接相关,可能是另一个无关的文件或者是一个例子,用于说明如何使用Spring IoC来构建能够带来收益的应用程序。...
2. **反转了什么**:原本由应用程序代码负责的bean生命周期管理,现在反转给了Spring容器。程序不再需要主动创建对象,而是由容器根据配置来创建并管理对象。这使得代码更加灵活,更容易测试和维护,因为对象的创建...
为什么需要依赖:应用程序需要IOC容器提供对象所需要的资源;谁注入了谁:很明显是IOC容器注入应用程序某个对象;应用程序依赖的对象注入了什么:就是注入某个对象所需要的外部资源(包括对象,资源,文件,常量数据...
Java实现简单的IOC容器示例代码 本篇文章主要介绍了使用Java实现一个简单的IOC容器示例代码,...使用IOC容器可以带来许多好处,如降低耦合度、提高灵活性、易于维护等。它可以使得系统更加松散耦合、灵活和易于维护。
IOC的核心理念是将对象的创建过程交给容器来完成,而不是由程序代码直接控制。简单来说,就是程序员不再需要关注对象是如何创建出来的,只需要告诉容器需要什么类型的对象,容器会自动帮我们创建好,并在适当的时候...
SoftBus是一个专为简化应用程序设计和增强其可维护性而设计的轻量级IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)容器。与Spring框架类似,它致力于提供依赖注入和面向...