聊聊Spring IOC容器的注入方式

聊聊,spring,ioc,容器,注入,方式 · 浏览次数 : 29

小编点评

**为什么要说这个?** * **IOC容器** 是 Spring 中最重要的基础设施,它负责管理对象的生命周期和依赖关系。 * **AOP** 是 IOC容器的功能扩展,它允许开发者通过接口来动态绑定对象。 * **Context** 是 Spring 中的上下文,它提供各种配置属性和环境变量,用于配置 IOC容器。 * **FactoryBean** 是一个可定制的 bean 定义器,它可以用来创建和配置由其他对象注入的对象。 * **BeanDefinitionRegistryPostProcessor** 接口用于动态注入 BeanDefinition对象。 * **BeanDefinitionRegistry** 是一个 Bean 注册器,它从 BeanDefinition 中获取 BeanDefinition 和配置它们在容器中。

正文

为什么要说这个?

对于Spring体系而言,我个人认为最重要的就是IOC容器,其次才是AOP、Context等模块;因为这些模块功能是或搭建或集成在IOC容器这个基础设施之上的。

直接基于Spring框架体系做开发时,可以通过常用的JavaConfig或XML方式将对象的生命周期及装配由容器原生的接管。如下

 这几种是我们最常用最常见的注入方式。而后通过Spring框架的原生装配方式@AutoWired或是JAVA规范的@Resource注解装配。

这是前言,平时查看源码时,比如mybatis或是seata、Nacos等框架要集成到Spring中,有蛮多我们不常用但是很实用的方式,这也是框架集成到SPring中最常用的方式,接下来,就来盘一下。

首先是FactoryBean,这是可定制可扩展的Bean定义方式,也是用的最多的,在Spring集成JDK或CGLIB的功能实现AOP时,便是基于此接口实现,当然还有Mybatis的SqlSessionFactoryBean以及MapperFactoryBean再就是Seata中的DataSource代理等,都是基于此接口实现,从而集成到Spring中,由Spring接管关键对象的生命周期管理。

最后就是不常用但是功能很强大的方式——BeanDefinitionRegistryPostProcessor接口动态注入BeanDefinition对象。

简单聊一下,Spring中Bean的管理其实是分为两块流程的,我们一般都是聚焦在Bean的生命周期模块,也就是实例化->属性填充->初始化->卸载;但是还有一个最开始的步骤也就是Bean的注册。

Bean的注册是从BeanDefinition这个对象的构造与注入开始的。而BeanDefinitionRegistryPostProcessor接口或ImportBeanDefinitionRegistrar接口就是基于此流程,通过实现此接口,从BeanDefinition开始构造对象,然后注入到容器中。在mybatis集成SPring中,Mapper接口对象的注入就是基于此接口来实现;还有一个应用就是dubbo集成Spring同样也是如此。但这个方式用得少。

 

与聊聊Spring IOC容器的注入方式相似的内容:

聊聊Spring IOC容器的注入方式

为什么要说这个? 对于Spring体系而言,我个人认为最重要的就是IOC容器,其次才是AOP、Context等模块;因为这些模块功能是或搭建或集成在IOC容器这个基础设施之上的。 直接基于Spring框架体系做开发时,可以通过常用的JavaConfig或XML方式将对象的生命周期及装配由容器原生的接

聊聊Spring的工厂方法与FactoryBean

概述 工厂方法是比较常见,常用的一种设计模式。FactoryBean是Spring提供的一种Bean注入IOC容器的方式。 工厂方法 在做日常开发时,一般都会避免直接new对象,而且将new的操作丢给IOC容器,但对于第三方系统的集成,我们不太好直接丢给IOC容器,此时可以通过工厂模式, 提供一个工

聊聊Spring Cloud Alibaba解决方案组件

在java的微服务解决方案中,最先出现目前应用比较多的就是spring cloud netfix系列,但是随着阿里的强劲支持,spring cloud alibaba解决方案逐渐可以替代前者,当然dubbo也是不容小觑的。之前面试几家公司应用的都是spring cloud alibaba,随着我自己

聊聊Spring Cloud Alibaba Sentinel的限流

Spring Cloud Alibaba Sentinel限流功能概览,目前先整理一版,东西有点多,想慢慢打开;后续继续更新......

聊聊Spring Cloud Gateway

Spring Cloud Gateway是基于Spring Boot 2.0、Spring WebFlux和Project Reactor等技术开发的网关,它不仅提供了统一的路由请求的方式,还基于过滤链的方式提供了网关最基本的功能;解决了Spring Cloud Zuul的性能问题。

聊聊Spring注解@Transactional失效的那些事

emm,又又又踩坑啦。这次的需求主要是对逾期计算的需求任务进行优化,现有的计算任务运行时间太长了。

聊聊Mybatis集成Spring的原理

一般都是研究框架源码,我为什么要反过来研究集成原理呢? 在我自己看来,集成虽然比较简单,但要求的细节比较多,需要掌握根本性的东西才能做到集成。 Mybatis集成Spring用到了FactoryBean以及BeanDefinition注册的原理,从这两个维度来实现集成,而我们单独学习Spring时,

聊聊Mybatis的实现原理

### 使用示例 平时我们使用的一般是集成了Spring或是Spring Boot的Mybatis,封装了一层,看源码不直接;如下,看看原生的Mybatis使用示例 ![image](https://img2023.cnblogs.com/blog/971683/202305/971683-2023

聊聊Maven的依赖传递、依赖管理、依赖作用域

1. 依赖传递 在Maven中,依赖是会传递的,假如在业务项目中引入了spring-boot-starter-web依赖: org.springframework.boot spring-boot-starter

聊聊Mybatis框架原理

好久没有写博客了。最近工作中封装了一个类似ORM框架的东西。大概的原理就是将Excel数据初始化到本地sqlite数据库后,通过json配置文件,对数据库的数据做增删改查等操作。 其实大概的思考了下,就是半ORM框架mybatis的逻辑,只是我们自己封装的简陋蛮多。想想有现成的轮子没用,反而是自己写