手撕Spring5框架(二)IOC容器介绍

从上一节我们知道了Spring的两个核心部分:IOC(控制反转)和AOP(面向切面编程)。

下面我们开始讲述IOC这部分功能

IOC是什么?

翻译过来意思是“控制反转”,把对象的创建和对象间的调用通过Spring去管理,目的是为了降低程序的耦合度

IOC的底层原理

在讲IOC底层原理实现之前,先思考一个问题:java中的对象间如何调用?

三种对象间调用的方式:

方案1:传统的java对象间的调用方式

在UserService类中实例化UserDao对象,然后调用UserDao中的方法

此方式耦合度较高,当UserDao方法发生变化,UserService中的代码也需要发生改变。

方案2:利用工厂模式解耦

创建一个工厂类,在工厂类中实例化UseDao对象,然后我们再UserService类中通过工厂类创建UserDao对象

此种方式的优点是,Service与Dao类进行了解耦,缺点是Service与工厂类UserFactory之间还是存在耦合度,如何最大限度的降

低耦合度呢?

方案3:Spring的IOC创建

IOC的底层实现利用3种JAVA技术

  • xml解析

  • 工厂模式

  • 反射

那么IOC是如何一步步降低你的程序耦合度的呢?我们要先了解IOC的过程:

1)创建xml配置文件,配置创建的对象,原先在代码里new 操作实例化对象现在通过Spring去管理

<bean id="userDao" class="org.learn.spring5.UserDao">
</bean>

2)创建工厂类,先利用xml解析技术对xml文件中class属性获取class值,然后利用反射机制创建对象

class UserFactory{
    public static UserDao getUserDao(){
        String classValue =  class属性值;//利用xml解析xml文件中class属性获取class值org.learn.spring5.UserDao
        Class clazz = Class.forName(classValue); //通过反射创建对象
		return (UserDao)clazz.newInstance(); 
    }
    
}

上面的例子就是Spring的IOC底层实现的基本原理,从上面程序可以看出利用Spring的IOC方式我们可以最大限度的降低了程序间的耦合度,对象的创建和对象间的调度都可以通过Spring去管理。

IOC接口的介绍

  1. IOC思想基于IOC容器完成,IOC容器的底层就是对象工厂

  2. IOC容器的实例化,Spring提供了两种方式:(两个接口)

    1)BeanFactory

    IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员进行使用。

    特点:加载配置文件时,不会创建对象,获取对象时才去创建对象。

BeanFactory beanFactory = new ClassPathXmlApplicationContext("bean1.xml"); //加载配置文件时,不去创建对象
      
        User user = beanFactory.getBean("user",User.class);  //此时才去创建对象

2)ApplicationContext

是BeanFactory的子接口,提供了更多更强大的功能,提供开发人员使用的。

特点:加载配置文件时,就会创建对象。

 ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");//加载配置文件时,创建对象
 User user = context.getBean("user",User.class);

  3. ApplicationContext的实现类介绍  

FileSystemXmlApplicationContext:默认是从系统的盘符下获取文件
ClassPathXmlApplicationContext:默认是指项目的classpath路径下面的配置文件

猜你喜欢

转载自blog.csdn.net/java_cxrs/article/details/108271773