网站首页 > 技术文章 正文
IOC(控制反转):全称为:Inverse of Control,将程序中组建的依赖关系由程序维护改为通过配置来维护,实现对象之间的松耦合。
以下举一个例子来说明IOC。
比如一个person类,人具有穿衣服的属性,可以穿T恤,衬衫,裙子等。
我们用程序来实现该段描述:
方式一:手工维护对象之间的关系
新建person类,由于person具有穿T恤,衬衫,裙子等动作,所以再新建一个接口Clothes,穿裙子,T恤,衬衫等实现该接口,裙子,T恤,衬衫等
person类:
Clothes接口:
T恤实现类:
裙子实现类:
衬衫实现类:
person 穿衬衫,裙子,T恤
Person girl = new Person();
girl.setClothes(new Skirt());
girl.getClothes();
/Person使用Shirt
Person man = new Person();
man.setClothes(new Shirt());
man.getClothes();
/Person使用Tshirt
Person young = new Person();
young.setClothes(new Tshirt());
young.getClothes();
每当增一个Person对象,他有穿衣服的需求,那么程序就需要再去new一个clothes对象,当对象不断增加后,程序就变得很难维护了。
方式二:使用spring IOC容器:
Spring IOC容器可以非常方便完成对象的创建和依赖的管理注入,通过对bean的配置,原来需要通过代码来new对象的工作完全交由IOC容器去维护,这样就实现了控制反转,从业务层面上也解耦了。(比如本例中的person与clothes)。
Bean配置:建立person与Tshirt,Skirt,Shirt之间的关系。
通过读取spring-config.xml配置文件,由IOC容器帮助生成对象,效果与“方式一:手工维护”完全一样。
public static void main(String[] args){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml"); Person girl = (Person)applicationContext.getBean("girl"); girl.getClothes(); Person man = (Person)applicationContext.getBean("man"); man.getClothes(); Person young = (Person)applicationContext.getBean("young"); young.getClothes();
猜你喜欢
- 2024-10-15 BATJ面试必会之 Spring 篇(30题) 面试spring的面试题
- 2024-10-15 Spring知识点提炼 spring题
- 2024-10-15 springmvc的核心是啥,请求的流程怎么处理,控制反转怎么实现
- 2024-10-15 spring源码分析——spring大纲 spring源码分析和总结简书
- 2024-10-15 Spring思维导图,让Spring不再难懂(ioc篇)
- 2024-10-15 Spring框架介绍及使用 spring框架的使用步骤
- 2024-10-15 架构师必知必会:Java内置的控制反转机制-Service Provider
- 2024-10-15 轻松理解 Spirng IoC/控制方向反转
- 2024-10-15 什么是控制反转(ioc),通过解释总结告诉你
- 2024-10-15 搞透IOC,Spring IOC看这篇就够了
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)