SpringIOC控制反转的原理详解

 更新时间:2023年08月17日 08:29:31   作者:刘婉晴  
这篇文章主要介绍了SpringIOC控制反转的原理详解,本来管理业务对象(bean)的操作是由我们程序员去做的,但是有了 Spring 核心容器后,这些 Bean 对象的创建和管理交给我们Spring容器去做了,也就是控制权由程序员变成了容器,需要的朋友可以参考下

一、 IOC 的概念

Spring 的 IOC ,即控制反转

所谓控制反转 —— 本来管理业务对象(bean)的操作是由我们程序员去做的,但是有了 Spring 核心容器后,这些 Bean 对象的创建和管理交给我们Spring容器去做了,也就是控制权由程序员变成了容器。

Spring 通过 Java 语言的反射机制实现实例化 Bean ,并建立 Bean 之间的依赖关系。

除此之外,Spring IOC 还提供 Bean 实例缓存,生命周期管理,Bean 实例代理等高级服务。

二、 高层视图

Spring 应用启动时,读取 Bean配置信息,在容器中生成注册表,然后根据注册表去实例化 Bean,再将实例化好的 Bean 放入 Spring 容器的 Bean 缓存池中,为上层应用程序使用。

在这里插入图片描述

三、 实现

BeanFactory 面向 Spring 本身, ApplicationContext 面向使用 Spring 框架的开发者。

BeanFactory

在这里插入图片描述

BeanDefinitionRegistry 注册表

Spring 配置的每一个 Bean 通过 BeanDefination 表示,描述了 Bean 的配置信息,BeanDefinitionRegistry 提供了向容器中注册 BeanDefination 的方法。

BeanFactory

getBean() 从容器中获取指定名称的 Bean

  • ListableBeanFactory : 提供访问容器 Bean 信息的方法
  • HierarchicalBeanFactory : 父子级联 ,实现子容器可以访问父容器的 Bean,但是父容器不能访问子容器的 Bean
  • ConfifurableBeanFactory : 增强了IOC容器的定制性。
  • SingletonBeanFactory : 允许运行时向容器中注册单例 Bean

ApplicationContext

ApplicationContext 由 BeanFactory 派生而来,提供了更多面向实际应用的功能

比如从类路径加载配置文件等 …

在这里插入图片描述

四、 Bean 的作用域和生命周期

作用域

  • Singleton : 单例模式,全局只有一个对象,多线程下不安全
  • Prototype : 原型模式,在每次使用时创建,每个 Bean 有自己的属性和状态
  • Request : 一次 Request 中一个实例
  • Session
  • Global Session

生命周期

  • 实例化
  • IOC 依赖注入
  • setBeanName
  • BeanFactoryAware
  • ApplicationContentAware
  • 接口实现-初始化预处理
  • 初始化方法
  • postProcessAfterInitialization
  • 过期自动清理/自动配置清理

到此这篇关于SpringIOC控制反转的原理详解的文章就介绍到这了,更多相关SpringIOC控制反转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现UDP互发消息

    Java实现UDP互发消息

    这篇文章主要为大家详细介绍了Java实现UDP互发消息,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • JDBC连接Mysql的5种方式实例总结

    JDBC连接Mysql的5种方式实例总结

    JDBC是Java DataBase Connectivity技术的简称,是一种可用于执行 SQL语句的Java API,下面这篇文章主要给大家介绍了关于JDBC连接Mysql的5种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • 使用SpringBoot开发Restful服务实现增删改查功能

    使用SpringBoot开发Restful服务实现增删改查功能

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了基于SpringBoot开发一个Restful服务,实现增删改查功能,需要的朋友可以参考下
    2018-01-01
  • JAVA内存模型(JMM)详解

    JAVA内存模型(JMM)详解

    这篇文章主要介绍了JAVA内存模型(JMM)详解的相关资料,需要的朋友可以参考下
    2022-12-12
  • SpringBoot  jdbctemplate使用方法解析

    SpringBoot jdbctemplate使用方法解析

    这篇文章主要介绍了SpringBoot jdbctemplate使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • MySQL实现远程登录的方法

    MySQL实现远程登录的方法

    Host 'Local' is not allowed to connect to this MySQL server 的解决方法,需要的朋友可以参考一下
    2013-03-03
  • 详解Java去除json数据中的null空值问题

    详解Java去除json数据中的null空值问题

    这篇文章主要介绍了详解Java去除json数据中的null空值问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • SpringMvc之HandlerMapping详解

    SpringMvc之HandlerMapping详解

    这篇文章主要介绍了SpringMvc之HandlerMapping详解,Handler可以理解为具体干活的,也就是我们的业务处理逻辑,Handler最终是要通过url 来访问到,这样url 与Handler之间就有一个映射关系了,需要的朋友可以参考下
    2023-08-08
  • Spring Boot中数据库操作Druid和HikariDataSource的详细过程

    Spring Boot中数据库操作Druid和HikariDataSource的详细过程

    这篇文章主要介绍了Spring Boot中数据库操作Druid和HikariDataSource的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Java反射机制深入理解

    Java反射机制深入理解

    这篇文章主要介绍了Java反射机制深入理解的相关资料,希望通过本文大家能理解这部分内容,需要的朋友可以参考下
    2017-09-09

最新评论