一文读懂spring IOC容器原理

文章介绍了Spring的IOC容器,它是通过配置元信息生成并管理Bean的对象。配置元信息可以是XML、注解或Java类。BeanDefinitionReader将元数据转化为BeanDefinition,BeanDefinitionRegistry作为注册中心存储这些定义。BeanFactory则负责根据需求创建和获取Bean。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是IOC容器?

spring的IOC容器简单理解就是提供一个方便获取bean的Map对象,我们可以基于自己的定义的配置元信息,然后spring框架给我们生成一个完全可用的bean对象,并把其保存在一个指定容器中。而当程序员去需要获取该对象的时候,不要自己去进行创建。其一个高层级的示意图如下:

 二、上图中各对象的概览

1、config metaData

        就这个就好比我们造房子一样,通常需要施工图纸,然后建造工程师按照施工蓝图来建造房子。那么同理我们需要从IOC容器中获取到对应的对象,那么我们就需要给spring框架提供建造这个Bean对象的蓝图,而这个蓝图就是我们的配置元信息。

     在spring中,配置元信息有xml方式、基于注解的方式、基于java类的方式。

 1.1  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.xsd">
	<bean id="user" class="top.hdsw.ioc.xml.bean.User">
		<property name="name" value="萨姆·沃辛顿"/>
	</bean>
</beans>

1.2  基于注解的配置方式

@Configuration
@ComponentScan(basePackages = {"top.hdsw.ioc.lookup.annotation"})
public class AppConfig {
}

1.3 基于java类的方式

	
	@Bean
	public Command command(){
		return new AsyncCommand();
	}

2、BeanDefinitionReader

见名知意,BeanDefinitionReader就是用来把配置的元数据转换成BeanDefinition的工具。

其中基于xml方式的配置具体实现类为:XmlBeanDefinitionReader,

基于注解方式的就是AnnotatedBeanDefinitionReader

两个类的结构图如下:

 

 3、BeanDefinitionRegistry

 BeanDefinitionRegistry是一个接口, 实现了AliasRegistry接口, 定义了一些对 BeanDefinition 的常用操作。可以认为是 Bean定义注册中心

它大概有如下功能:

以Map<String, BeanDefinition>的形式注册bean
根据beanName 删除和获取 beanDefiniation
得到持有的beanDefiniation的数目
根据beanName 判断是否包含beanDefiniation

在spring 框架中最通用的实现类为DefaultListableBeanFactory

4、BeanFactory

这个是Bean的工厂,提供各种获取到bean的方法

 

 后续会依据这个图来分析每一个具体操作及具体类的作用!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值