博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初探Spring - IOC原理
阅读量:5937 次
发布时间:2019-06-19

本文共 1855 字,大约阅读时间需要 6 分钟。

一、IOC是什么

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来降低代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。 IOC不是一种技术,而是一种思想。

举个例子:

如果我们想开车,一般人会努力工作,拼命挣钱,然后买车。还有另外一种选择,去租车行租车。对于前者,他只能开自己的车,而且需要自己负责车的保养、维修。而后者则可以随时换车,今天开大奔感觉不爽,明天换辆奥迪,而且无需对车进行保养和维修,自由度很大。

对应在程序设计中,第一种方式类似于:在Person类内部创建一个Car类的实例BMW,在类内部就将Car写死了,而且还要负责对BMW的创建、维护、回收。

而第二种方法则类似于:在Person中只创建一个Car的引用,而不将其实例化,待到程序运行中需要使用到Car时,动态的注入实例,可以传入BMW,Audi,Benz...不仅自由度高,耦合度低,且无需对实例进行管理维护。

第二种方案的实现代码:

1.主类

public class PersonDrive {    public static void main(String[] args) {        ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");        Car car = (Car) context.getBean("Benz");        Person person = new Person();        person.setCarName(car.getName());        person.drive();        // 奔驰开烦了,换辆奥迪        car = (Car) context.getBean("Audi");        person.setCarName(car.getName());        person.drive();    }}

2.定义Car接口

public interface Car {    public String getName();}

 

3.Benz实现Car接口

public class Benz implements Car {    public String name;    public String getName(){        return this.name;    }    public void setName(String name){        this.name=name;    }}

 

4.Audi实现Car接口

public class Audi implements Car {    private String name;    public String getName() {        return this.name;    }    public void setName(String name) {        this.name = name;    }}

 

5.Person类

public class Person {    private String carName;    public void drive(){        System.out.println("drive:"+carName);    }    public void setCarName(String name){        this.carName=name;    }}

 

6.配置applicationContext.xml文件

 

运行输出:

drive:Benz

drive:Audi

 

转载于:https://www.cnblogs.com/crazyacking/p/5569111.html

你可能感兴趣的文章
SpringMVC常用注解标签详解
查看>>
day18 Set集合
查看>>
Oracle event之db file read
查看>>
ORA 00600 [ktrexc_1]
查看>>
Docker 安装
查看>>
网络功能的“公认模型”
查看>>
如何通过Flow制作简单的工作流 - 请假审批2
查看>>
Http 以post方式获取数据
查看>>
查询文件系统容量与每个目录的容量
查看>>
角度与弧度的转换 - 三角学
查看>>
接口规范 3.应用相关接口
查看>>
traceroute命令
查看>>
zabbix接入百度告警详细攻略
查看>>
在Exchange 2010邮箱迁移时有用的命令行
查看>>
smarty学习
查看>>
11.python并发入门(part11 进程同步锁,以及进程池,以及callback的概念)
查看>>
GitHub简单仓库管理
查看>>
零基础学习Puppet自动化配置管理(文档持续更新中)
查看>>
共享一个PD导数据字典的方法
查看>>
我的友情链接
查看>>