Spring Framework之BeanDefinition建模基石(一)

一、前言

声明:初识架构篇我们采用的是解析文件(ClassPathXmlApplicationContext)的方式,解析文件比较繁琐,本篇至以后采用注解(AnnotationConfigApplicationContext)的方式

通过初识架构篇我们了解了一个ioc容器,但Spring又是怎么做的呢?通过下面3点我们讲了解简单的Spring:
1.BeanDefinition是什么?
2.游走BeanDefinition源码
3.Spring通过BeanDefinition产生一个bean对象过程

二、BeanDefinition是什么

BeanDefinition就是bean对象的定义,Spring会根据该定义生成一个完整的bean,里面都是bean的描述信息(生成的bean类型、bean的作用域、是否懒加载、注入模型….),并注入ioc容器。
BeanDefinition关系图
avatar
BeanDefinition图解
avatar

三、游走BeanDefinition源码

源码解析导图
avatar
BeanDefinition
avatar
AbstractBeanDefinition
avatar
GenericBeanDefinition
avatar
AnnotatedGenericBeanDefinition
avatar

拓展知识

AnnotationMetadata
avatar
MethodMetadata
avatar

四、Spring通过BeanDefinition产生一个bean对象过程

代码区

1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
public void Test(){
// 1⃣️:构建应用上下文
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
// 2⃣️:注册一个SystemPrint bean
context.register(SystemPrint.class);
// 3⃣️:刷新应用上下文
context.refresh();
// 4⃣️:获取IOC容器bean对象
Object bean = context.getBean(SystemPrint.class);
// 触发懒加载
log.info("{}",bean);
}

1⃣️:构建应用上下文
avatar

2⃣️:注册一个SystemPrint bean
avatar
avatar
avatar
avatar
avatar

3⃣️:刷新应用上下文

只有懒加载的bean才不会在现在进行加载

avatar

4⃣️:获取IOC容器bean对象

获取Bean对象,如果是懒加载的Bean才会在获取的时候进行加载,本章不会深揪加载流程

avatar
程序执行输出

1
[Test worker] INFO SpringFrameworkTest - bean.SystemPrint@1fd53402
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信