ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

spring(IOC)

2022-03-19 14:35:48  阅读:166  来源: 互联网

标签:容器 BeanFactory 对象 spring ApplicationContext Spring IOC


IOC介绍

IOC是什么

IOC(Inversion of Control)即“控制反转”,意味着将设计好的对象交给容器控制

  • 传统的Java程序的设计,直接在对象内部通过new形式创建对象,是程序主动去创建依赖对象,而IOC技术是专门一个容器来创建对象,IOC容器来控制对象的创建而不是显式的使用new
  • 对象的创建交给容器管理,这就是控制反转
    控制反转是通过容器来完成的,Spring中提供了这样一个容器,称之为IOC容器
    无论是创建对象,处理对象之间的依赖,对象的创建时间还是对象创建的数量,都是由Spring为我们提供的IOC容器上配置上兑现信息就行

IOC能做什么

有了IOC容器之后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松耦合的,这样方便进行测试,利用功能复用,使整个体系结构变动非常灵活
由IOC容器来帮对象找响应的依赖对象并注入,而不是对象主动去找。核心点在于,资源不是由使用资源的的调用方管理,而是不使用资源的第三方管理,第三方指的就是IOC容器

资源的集中管理,实现资源的可配置和易管理
降低了使用资源双方的依赖程度,也就是说的松耦合

Spring容器管理对象Demo

1、添加Spring核心依赖

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

2、Spring的配置文件

<?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、创建实体类(Student.java)

public class Student {
    private Integer id;
    private String name;

   //省略getter和setter方法
}

4、IOC容器管理对象

以前是通过new形式来创建student对象的
Student student = new Student();
现在通过IOC容器,可以让IOC负责创建并管理对象,直接在applicationcontext.xml配置文件中配置对应信息

<!--使用bean标签来标识容器管理的对象 id属性标识对象名称,取名字  class属性指向要容器管理对象全限定名 -->
    <bean id="student"  class="com.tulun.Spring.IOC.pojo.Student"/>

5、通过容器获取Student对象

        //获取到IOC容器
        String path = "applicationContext.xml";
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(path);
        Student student = (Student)applicationContext.getBean("student");
        System.out.println(student);

以上执行结果可知:可以通过容器来获取对象实例

总结:Spring IOC操作总结

  1. 增加一个spring配置文件
  2. 对xml文件进行解析
  3. BeanFactory工厂类
  4. 在工厂类的方法中使用反射创建bean对象

Spring中IOC容器介绍

在这里插入图片描述
以上是Spring IOC容器中接口的继承关系,其中ApplicationContext接口是BeanFactory的子接口。
BeanFactory是Spring IOC容器所定义的最底层接口
ApplicationContext是BeanFactory的最高级实现之一,并对BeanFactory功能上做了很多扩展,所以在大部分的工厂场景下,都会使用ApplicationContext作为IOC 容器
● BeanFactory
BeanFactory位于最底层的实现,提供了比较先进的配置机制,使得任何对象的配置成为可能
● ApplicationContext
ApplicationContext在BeanFactory基础上做了很多扩展实现
ApplicationContext在BeanFactory区别在于:BeanFactory的实现是按需创建,即第一次获取bean时才创建bean。
ApplicationContext会一次性创建所有的bean,ApplicationContext也提供了一些额外功能,比如与Spring的AOP更容易继承,也提供了Message Resource的机制(用于处理国际化支持)和通知机制

ApplicationContext常见实现类

● ClassPathXmlApplicationContext
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(“applicationcontext.xml”);
读取classpath,如果配置文件在当前系统类路径下,可以优先使用ClassPathXmlApplicationContext类

● FileSystemXmlApplicationContext
FileSystemXmlApplicationContext applicationContext = new FileSystemXmlApplicationContext(“d://application.xml”);
读取指定路劲下的资源,如果配置文件放在文件系统路径下,则可以优先选用FileSystemXmlApplicationContext

● XmlWebApplicationContext
XmlWebApplicationContext ac = new XmlWebApplicationContext(); // 这时并没有初始化容器
ac.setServletContext(servletContext); // 需要指定ServletContext对象
ac.setConfigLocation("/WEB-INF/applicationContext.xml");
// 指定配置文件路径,开头的斜线表示Web应用的根目录
ac.refresh(); // 初始化容器
读取在web环境下才可以运行

容器管理对象过程

在这里插入图片描述

  • 1.Spring启动时读取应用程序提供 Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表;
  • 2.根据这张注册表实例化Bean;
  • 3.通过配置文件装配好Bean之间的依赖关系,放到Bean缓存池,为上层应用提供准备就绪的运行环境。
    Bean缓存池:通过hashMap实现

标签:容器,BeanFactory,对象,spring,ApplicationContext,Spring,IOC
来源: https://blog.csdn.net/xasasaa/article/details/123594176

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有