spring源码分析1

本文基于spring1.0.0版本,详细分析了BeanFactory的继承关系,以及bean加载和获取的流程。首先介绍了BeanFactory作为管理bean的核心接口,然后通过XmlBeanFactory的构造方法和loadBeanDefinitions方法,揭示了bean定义的加载过程。在解析bean定义的过程中,重点关注了getPropertyValueSubElements和getConstructorArgSubElements方法,这些方法处理了bean的属性和构造参数,实现了bean间的依赖管理。
摘要由CSDN通过智能技术生成

spring源码分析1

采用的spring1.0.0版本的源码,我一直认为spring中的一些设计思想从最初版本就已经确定了,后续的版本只是不断的优化该思想,spring1.0中还没有基于注解的配置,也便于我们分析理解,主要的还是以xml的形式配置bean,源码下载地址

spring IOC

我们看spring相关教程中,在spring IOC容器中,由spring管理bean与bean之间的依赖,本节主要从源码层面分析,spring是如何管理bean与bean之间的依赖

在spring ioc中,我们听的比较多的有FactoryBean、BeanFactory、ApplicationContext,如果看过spring bean的加载顺序可能还听过,BeanNameAware、BeanFactoryAware、InitializingBean等等,面试中也经常问道IOC有关的知识

慢慢来,我们一个一个分析

BeanFactory继承关系介绍

BeanFactory从名字上看,是bean工厂,是管理bean的地方,从源码的注解上来看,是一个接口,实现类可以持有一些bean定义,每个bean定义都有一个名字。可以看出IOC容器一定实现了beanFactory

Interface to be implemented by objects that hold a number of bean definitions,each uniquely identified by a String name.

看看它有哪些接口,英文注释太多了,我添加了一些我自己的理解

public interface BeanFactory {
   
 //根据bean名称获取bean实例
   Object getBean(String name) throws BeansException;
//根据bean名称与bean类型获取bean实例
   Object getBean(String name, Class requiredType) throws BeansException;
//IOC容器是否含有bean名称的实例
   boolean containsBean(String name);
//IOC容器含有bean名称的实例是否为单例
   boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
//IOC容器含有bean名称的实例的别名
   String[] getAliases(String name) throws NoSuchBeanDefinitionException;
}

在spring1.0中,继承BeanFactory如图所示

beanFactory接口关系

我们使用的最多的还是ApplicationContext接口

public interface ApplicationContext
    extends ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ResourceLoader {
   
   
   ApplicationContext getParent();

   String getDisplayName();
    
   long getStartupDate();

   void publishEvent(ApplicationEvent event);

}

MessageSource定义了国际化相关的方法,ResourceLoader定义了根据路径获取资源文件的方法,ListableBeanFactory在BeanFactory的基础上增加了beanDefinition的相关接口

public interface ListableBeanFactory extends BeanFactory {
   
//bean定义数量
   int getBeanDefinitionCount();
//所有bean定义名称
   String[] getBeanDefinitionNames();
//根据类型返回所有bean定义名称
   String[] getBeanDefinitionNames(Class type);
//是否含有bean名称的bean定义
   boolean containsBeanDefinition
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值