IOC底层原理

 最近开始在学习spring5的源码,对IOC的底层原理有了进一步的了解,框架的形成并不是一蹴而就的,而是通过一定的演变形成。

什么是IOC
1、 控制反转,把对象创建和和现象之间的条用过程,交给spring进行管理,目的就是降低耦合度
2、 底层实现:xml解析、工厂模式、反射
实例
在这里插入图片描述

如果userService的execute()想要调用UserDao里面的add()方法,可以有以下几种方法。
(1)最简单的方法就是在UserService中new一个UserDao对象,通过引用来调用方法。这种方法耦合度较高,例如UserDao的路径名修改或者方法改变后,UserService中也要相应的修改,代码维护量大。
(2)工厂模式,通过创建工厂类来实现,此方法虽然降低了UserService和UserDao之间的耦合,但是UserService和UserDao都与工厂类有耦合。如下图
创建工厂类实现
(3)IOC实现过程,这种方式使耦合度进一步降低。
第一步:配置xml文件,配置创建的对象

<bean id="dao" class="com.cxr.UserDao"></bean>

第二步: 有service类和dao类,创建工厂类

Class UserFactory{
   public static UserDao getDao(){
      String classValue=class属性值;   //xml解析,这里得到的是com.cxr.UserDao全路径名
      //通过反射创建对象
      Class class=Class.forName(classValue);
      return (UserDao)class.newInstance();  //创建对象并返回
}
}

3、 IOC接口

   1、  IOC思想基于IOC的容器完成,IOC容器底层就是对象工厂
   2、 Spring提供IOC容器实现两种方式:(两个接口)

(1)BeanFactory:IOC容器基本实现,是Spring内部使用接口,不提供开发人员进行使用,加载配置文件时候不会创建对象,在获取对象才去创建对象。

(2)ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用,加载配置文件时候就会把配置文件对象进行创建。一般都会使用ApplicationContext来实际开发,因为对象创建这种费时费资源的事情最好在项目启动时就完成。当然ApplicationContext和BeanFactory里面也有很多的实现类,感兴趣的可以自己去看看。

刚开始写博客,懂的知识也不多,只能边学边写来加深印象,有什么补充和想法可以在评论区讨论哦
Logo

Authing 是一款以开发者为中心的全场景身份云产品,集成了所有主流身份认证协议,为企业和开发者提供完善安全的用户认证和访问管理服务

更多推荐