看了那么久!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
文章插图
推荐阅读
- 苹果创始人乔布斯的传奇人生:造就了苹果的巅峰,其实没那么完美
- 只需799元就可以把旧iPad换成新款iPad?是真的!但这羊毛可没那么容易薅
- 世界最小手机发售:31克 打火机那么大
- 只为好看?手机多摄像头排布方式可没有那么简单
- 为什么液晶电视的色温那么高?
- 电脑开机那么难
- 通知:今晚小米11发布,完整信息汇总如下,发布会可以不看了
- 三星S21/S21+关键信息曝光:屏幕没那么大
- 重大决定!小米11将取消充电器:但事情似乎没那么简单
- 坚果R2的优势可能没有你想的那么简单