看了那么久!IOC的概念原来这样简单
文章插图
控制反转(Inversion of Control , 缩写为IoC) , 是面向对象编程中的一种设计原则 , 可以用来减低计算机代码之间的耦合度 。
其中最常见的方式叫做依赖注入(Dependency Injection , 简称DI) , 还有一种方式叫“依赖查找”(Dependency Lookup) 。 通过控制反转 , 对象在被创建的时候 , 由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它 。 也可以说 , 依赖被注入到对象中 。
IoC最常见的三种形式:
第一种:通过容器完成依赖关系的注入
<实现类实例化-->
第二种:属性注入属性注入的方式介绍(三种方式)在spring框架里面仅支持1.2.方法 。 方法一:属性的set方法(最多使用)方法二:带参数的构造方法方法三:使用接口注入 (较少用)
public class MoAttack {private GeLi geli;//属性注入方法public void setGeli(GeLi geli) {this.geli = geli;}public void cityGateAsk() {geli.responseAsk("消费者");}}-----------------------------------------------------------------------------------------------------MoAttack为geli属性提供一个Setter方法 , 以便让导演在需要时注入geli的具体扮演者Director:通过Setter方法注入提供者 public class Director {public void direct(){GeLi geli = new LiuDeHua();MoAttack moAttack = new MoAttack();//调用属性Setter方法注入moAttack.setGeli(geli);moAttack.cityGateAsk();}}
第三种:接口注入
将调用类所有依赖注入的方法抽取到一个接口中 , 调用类通过实现该接口提供相应的注入方法 。 为了采取接口注入的方式 , 必须先声明一个Arrangable接口:public interface Arrangable {void injectGeli(GeLi geli);}--------------------------------------------------------------------------------------------------------------- 然后 , MoAttack实现Arrangable接口提供具体的实现public class MoAttack implements Arrangable {private GeLi geli;//实现接口方法public void injectGeli (GeLi geli) {this.geli = geli;}public void cityGateAsk() {geli.responseAsk("消费者");}}
【看了那么久!IOC的概念原来这样简单】明确 ioc 的作用:削减计算机程序的耦合(解除我们代码中的依赖关系 。
文章插图
IoC容器的初始化:1、高富帅IOC解剖2、 设置资源加载器和资源定位:
AbstractApplicationContext的refresh函数载入Bean定义过程AbstractApplicationContext子类的refreshBeanFactory()方法AbstractRefreshableApplicationContext子类的loadBeanDefinitions方法AbstractBeanDefinitionReader读取Bean定义资源
3、资源加载器获取要读入的资源:
XmlBeanDefinitionReader加载Bean定义资源 DocumentLoader将Bean定义资源转换为Document对象XmlBeanDefinitionReader解析载入的Bean定义资源文件DefaultBeanDefinitionDocumentReader对Bean定义的Document对象解析
4、BeanDefinitionParserDelegate解析Bean定义资源文件中的元素
BeanDefinitionParserDelegate解析元素解析元素的子元素解析子元素
5、解析过后的BeanDefinition在IoC容器中的注册:
DefaultListableBeanFactory向IoC容器注册解析后的BeanDefinition
文章插图
- 5G手机越来越普及,但为什么4G的iPhone依旧那么火热?
- 看了PS5的拆机视频,下世代主机最重要的配件可能是空调
- 看了老罗直播,我买了这款网易严选工学椅,体验一周说说感受
- 手机和电脑比电视方便那么多,为什么还有那么多人喜欢看电视?
- 曲面屏真有那么不堪吗?细数曲面屏的“四宗罪”
- 买了扫地机器人就不用请保姆了?实际体验并没有想象中那么美好
- Linux 开发过程那么麻烦,是否值得?
- 潘婷|潘婷产品的新包装,太好看了!
- iPhone 12影像性能真的那么弱?你可太小看它了
- 不需要输入密码,就能将钱扫走,超市的“扫码枪”怎么那么神奇