1、Spring IOC体系

本文介绍了Spring框架中IOC容器的两大核心组件:BeanFactory和BeanDefinition。BeanFactory定义了IOC容器的基本行为,并通过多个实现类提供不同级别的功能。BeanDefinition则负责封装bean之间的关系,确保Spring能够支持灵活且可扩展的bean配置。

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

在Spring IOC体系中最重要的两个部分就是BeanFactory和BeanDefinition。

BeanFactory:

BeanFactory是一系列工厂的接口,典型的工厂模式,BeanFactory来实例化、配置和管理对象。BeanFactory和很多具体的实现类,先来看一下BeanFactory接口本身的定义,它直接定义了IOC容器的基本行为。

 

public interface BeanFactory {
    //这里是对FactoryBean的转义定义。 //如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,转义符“&”用来获取FactoryBean本身
	String FACTORY_BEAN_PREFIX = "&";
	
	//根据bean的名字来获得IOC容器中的bean实例  需要强转
	Object getBean(String name) throws BeansException;

	//根据bean的名字和Class<T>来获得IOC容器中的bean实例 
    //不需要强转,在函数内部根据Class<T>转换成目标类型	
	<T> T getBean(String name, Class<T> requiredType) throws BeansException;

	//根据Class<T>来获得IOC容器中的bean实例 需要保证配置的目标类型唯一
    //不需要强转,在函数内部根据Class<T>转换成目标类型
	<T> T getBean(Class<T> requiredType) throws BeansException;

	//根据bean的名称和指定显式构造函数 参数 获取目标bean
	Object getBean(String name, Object... args) throws BeansException;

	//根据bean的名称和指定显式构造函数 参数类型 获取目标bean
	<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;

    //根据bean的名称,判断是否已经包含该bean
	boolean containsBean(String name);

	//根据bean的名称,判断该bean的实例是否为单例
	boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

	//根据bean的名称,判断该bean的实例是否为多例
	boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

	//检查给定名称的bean是否与指定的类型匹配
	boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;

	boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;

	//获取给定名称的bean的class
	Class<?> getType(String name) throws NoSuchBeanDefinitionException;

	//返回给定bean名称的别名,如果有的话。
	String[] getAliases(String name);

}

BeanFactory只是定义了IOC容器的基本行为,具体的实现还是要依赖它的子类,Spring有很多IOC容器的实现,下面是它的继承体系。

图一:BeanDefinition的继承体系(图片取自网络)

在这些实现中其中一个典型的的就是XmlBeanFactory,XmlBeanFactory的实现原理就是读取XML中定义的信息,封装成BeanDefinition类,再注册到IOC容器中。

BeanFactory还有一个子接口ApplicationContext对它的功能进行了增强,是Spring提供的一个高级IOC容器,再完成IOC容器的基本功能之外,还通过继承接口实现了

 1、支持信息源和国际化(继承MessageSource接口);

 2、访问资源(继承ResourcePatternResolver);

 3、支持应用事件(继承ApplicationEventPublisher)

简单的比较两者就是,XmlBeanFactory是普通版,ApplicationContext是高配版。

 

BeanDefinition(接口)

Spring IOC容器通过BeanDefinition的实现类对bean之间的关系进行了封装。

由于Spring要支持bean之间灵活性和拓展性,所有导致了Bean的解析过程异常复杂,功能也划分得很细,继承体系也比较复杂。


图二:BeanDefinition的继承体系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值