spring源码学习

从零开始分析spring源码

注:先把spring源码从git上当选来,spring5的源码(百度都是教程)

AnnotationConfigApplicationContext a = new AnnotationConfigApplicationContext();

这是基于注解方式的加载spring应用
另外还有:ClassPathXmlApplicationContext的方式


对于AnnotationConfigApplicationContext来说,实现了BeanDefinitionRegistry接口(BeanDefinitionRegistry继承了AliasRegistry接口)
AliasRegistry:别名注册(方法有增删改查别名)
BeanDefinitionRegistry:作用是注册beanDefinition(方法有增删改查是否包含beanDefinition)

  • beanDefinition:引用网上的说法:类名、scope、属性、构造函数参数列表、依赖的bean、是否是单例类、是否是懒加载等,其实就是将Bean的定义信息存储到这个BeanDefinition相应的属性中,后面对Bean的操作就直接对BeanDefinition进行,例如拿到这个BeanDefinition后,可以根据里面的类名、构造函数、构造函数参数,使用反射进行对象创建。
    bean定义实际上就是一个bean的模板,之后会用这个bean定义模板去创建对象放到spring容器中。

beanDefinition的继承关系:
在这里插入图片描述
AttributeAccessor:属性访问器(增删改查属性)
BeanMetadataElement:没明白啥意思以后再说
beanDefinition中有一个ResolvableType getResolvableType()方法:借鉴

https://blog.csdn.net/u012881904/article/details/80813294


beanDefinition有以下的实现类:在这里插入图片描述

对于AnnotationConfigApplicationContext来说,有参的构造方法:

public AnnotationConfigApplicationContext(Class<?>... componentClasses) {
		//调用构造方法
		this();
		//对将要管理的bean进行注册
		register(componentClasses);
		//ioc的主要进行方法
		refresh();
	}

this方法调用了无参的构造方法

public AnnotationConfigApplicationContext() {
		this.reader = new AnnotatedBeanDefinitionReader(this);
		this.scanner = new ClassPathBeanDefinitionScanner(this);
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值