spring-beans模块分析

描述:spring-beans负责实现Spring框架的IOC模块

UML结构图如下:

AbstractBeanFactory:BeanFactory接口的抽象实现类,提供了ConfigurableBeanFactory 完整SPI。通过DefaultSingletonBeanRegistry实现了单例缓存(singleton cache).实现了通过FactoryBean判断bean类型(singleton/prototype)功能,处理,别名和合并bean definition功能,创建,获取和销毁bean对象功能,内部引用了parentBeanFactory对象,实现了BeanFactory的双亲委派结构

核心方法:

1.createBean

 整体流程如下:

    

resloveBeanClass具体实现:返回RootBeanDefinition对象的beanClass属性或者其他的classloader根据RootBeanDefinition对象的beanClassName属性解析出的Class<?>

resloveBeforeInstantiation具体实现:遍历beanFactory对象的beanPostProcessors列表两次,对当前bean分别递归调用beanPostProcessor接口的postProcessBeforeInstantiation(转化为InstantiationAwareBeanPostProcessor类型)和 postProcessAfterInitialization方法(上一次接口调用的返回值作为下一次接口调用的请求)

doCreateBean具体实现:

createBeanInstance具体实现如下:

1.如果RootBeanDefinition对象定义了instanceSupplier属性,返回instanceSupplier.get()

2.如果RootBeanDefinition对象的factoryMethodName属性不为空,返回通过factoryMethod方法构造的实例

3.如果RootBeanDefinition对象的resolvedConstructorOrFactoryMethod属性不为空,返回通过特定方式构造的实例

4.遍历beanPostProcessor(转化为SmartInstantiationAwareBeanPostProcessor)列表,使用determineCandidateConstructors(beanClass, beanName)获取特定构造器,返回特定构造器返回的实例

5.返回无参构造器

AbstractApplicationContext:org.springframework.context.ApplicationContext接口的抽象实现,用于创建或者刷新IOC容器

核心方法:

1.refresh 

创建或者刷新IOC容器

执行流程如下:

1.1 prepareBeanFactory详解

流程如下:

1.2  invokeBeanFactoryPostProcessors详解

流程如下:

备注:如果beanFactory是BeanDefinitionRegistry类型的话,在beanFactoryPostProcessors和beanFactory查找BeanDefinitionRegistryPostProcessor类型,并执行相应方法

1.3 登记ApplicationListener对象

ApplicationListener类型UML结构图如下:

类型名描述具体实现
ContextRefreshListener只接收WebApplicationContext发出的消息,提供了扩展点供子类使用委托给FrameworkServlet对象调用onApplicationEvent方法
ApplicationListenerMethodTransactionalAdapter调用添加了TransactionalEventListener注解的spring bean对象方法(提供了如何实现灵活调用系统扩展点的思路) 
ApplicationListenerMethodAdapter调用添加了EventListener注解的spring bean对象方法 
GenericApplicationListenerAdapter代理模式实现事件类型和监听器匹配 

1.4 初始化BeanFactory中定义的singleton对象

AbstractRefreshableApplicationContext:默认使用DefaultListableBeanFactory类型

AbstractRefreshableWebApplicationContext:面向web环境的ApplicationContext,主要涉及到ServletContext和ServletConfig

ServletContextAwareProcessor:

备注:将bean转换为ServletContextAware类型,并设置对应ServletContext和ServletConfig参数

XmlWebApplicationContext:使用xml配置加载bean对象

 

 

 

                               

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring-beans模块Spring框架中最基础的模块之一,提供了BeanFactory和FactoryBean等Bean管理相关的类。在Spring中,Bean指的是被Spring IoC容器管理的对象,而BeanFactory则是管理Bean的工厂类,是Spring IoC容器的核心组件之一。 Spring-beans模块的主要功能如下: 1. BeanFactory:BeanFactory是Spring IoC容器的核心接口,提供了获取Bean、注册Bean和销毁Bean等方法。BeanFactory是Spring IoC容器的基础,包括DefaultListableBeanFactory、XmlBeanFactory等实现类。 2. FactoryBean:FactoryBean是一种特殊的Bean,可以通过实现FactoryBean接口来自定义Bean的创建过程。FactoryBean的作用是在Bean的实例化过程中添加一些逻辑,例如对Bean进行缓存、延迟初始化等操作。 3. BeanPostProcessor:BeanPostProcessor是Spring IoC容器提供的扩展点,可以在Bean的初始化过程中添加一些自定义的逻辑。BeanPostProcessor提供了两个方法:postProcessBeforeInitialization和postProcessAfterInitialization,分别在Bean的初始化前后执行。 4. BeanDefinition:BeanDefinition是Spring IoC容器中定义Bean的元数据,包括Bean的类型、属性、依赖关系等信息。BeanDefinition是Spring IoC容器管理Bean的基础,可以通过BeanDefinition来实现Bean的配置、管理和装配。 除了以上功能,Spring-beans模块还提供了很多其他的类和接口,如BeanWrapper、BeanNameAware、InitializingBean和DisposableBean等,用于实现Bean的属性注入、生命周期管理和销毁等操作。 总之,Spring-beans模块Spring框架中最基础的模块之一,提供了Bean管理相关的类和接口,是Spring IoC容器的核心组件之一,使用Spring框架时必须引入该模块
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值