【Spring框架】IOC容器


IOC容器讲解

IOC思想

Spring的核心思想之一:IOC(Inversion Of Control)控制反转。

什么是控制反转?

  • 将对象的创建,配置及维护交给第三方管理,第三方这里指的是IOC容器
  • 由容器来负责对象的创建等工作,谁需要使用对象,就可以在IOC容器中获取,这就是控制反转

对象与对象之间的依赖关系在Spring中如何处理?

  • Spring中对象在创建之后,需要依赖其他对象时就需要依赖注入DI(Dependency Injection)
  • 控制反转是将对象交给外部管理(容器),而依赖注入也可以交给容器进项管理

IOC核心点在于:对象不由使用方双方管理,而是交给不使用的第三方进行管理

好处:

  1. 资源集中管理,实现资源的可配置和易维护
  2. 降低了使用资源双方的依赖程度,即是我们说的降低耦合度

Spring容器管理对象

1、导入依赖

        <!--Spring依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>      

2、Spring的配置文件

在resources目录下给定xml配置文件,命令为application.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--根标签-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 

</beans>   

3、创建实例类(Person.java)

public class Person {
    
    
    private String name;
    private int id;
}

4、IOC容器管理对象

  • 以前我们通过new Person的方法创建对象。如:Person person = new Person();
  • 现在使用IOC的容器。可以让IOC容器帮创建对象,在application.xml文件中添加User的对应信息
<bean id="person"  class="com.tulun.bean.Person"/>
  • 交给管理对象使用标签 class属性:指定的是管理对象的类的全路径 id:表示该类的名称,通过该名称可以拿到对象实例

5、通过容器来获取对象

public class App {
    
    
    public static void main(String[] args) {
    
    
        //获取IOC容器
        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        //在容器中获取需要的对象
        Person1 person = (Person) context.getBean("person");
         System.out.println(person);
    }
}

6、执行结果

在这里插入图片描述

IOC容器介绍

Spring中的Core模块:IOC容器,解决对象创建和对象之间的依赖关系,Core模块主要是如何获取容器
在这里插入图片描述
以上就是ApplicationContext容器中的接口的继承关系,ApplicationContext是BeanFactory的子接口之一,即BeanFactory是Spring IOC容器定义的最底层的接口,ApplicationCentext是BeanFactory的高级实现之一,是对BeanFactory功能做了许多的扩展。

1、BeanFactory

通过上面继承关系可知,BeanFactory是最底层的IOC容器实现

//获取IOC容器
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("application1.xml"));

2、AplicationContext

是IOC容器的高级使用,对BeanFacory做了很多扩展,功能比较强大,在实际使用过程中IOC容器往往使用的就是ApplicationContext

主要使用的三种创建IOC的方式:

(1)ClassPathXmlApplicationContext

读取ClassPath中的资源

ClassPathXmlApplicationContext("application.xml");

(2)FileSystemXmlAplicationContext

读取指定路径下的资源

new FileSystemXmlApplicationContext("/user");

(3)XmlWebAplicationContext

XmlWebApplicationContext wa = new XmlWebApplicationContext()//并没有初始化容器
wa.setServletContext(sevletcontext);//需要指定servletContext对象
wa.setConfigLocation("/applicationContext.xml");//指定配置文件的路径,开头是以web为根目录的路径
wa.refresh();//初始化容器

3、BeanFactory和ApplicationContext的区别

ApplicationContext在构建核心容器时,创建对象采取的是立即加载的方式。也就是说,只要一读取完配置文件马上就创建配置文件中配置的对象。
BeanFactory在构建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正的创建对象。

IOC容器原理浅析

  1. 利用dom4j技术,解析XML配置文件,获取里面所有的信息。
  2. 根据class属性的值,利用反射创建对象。
  3. 将利用反射创建出的对象放入到map中,key就是它所对应的id值。

IOC容器管理对象的过程

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Super_Powerbank/article/details/113149341