Spring源码解析(一)-XML+注解解析

本文深入探讨Spring框架的源码解析,重点关注XML配置和注解解析的过程。首先介绍了BeanDefinition对象,它是Spring管理对象的核心,包含了如id、class、autowire等关键属性。接着详细阐述了XML解析过程,从读取Resource到解析Document,最终将bean标签转换为BeanDefinition。此外,文章还讨论了自定义标签解析,包括根据namespaceuri获取handler,解析注解到BeanDefinition中。解析完成后,所有组件和注解都将转换为BeanDefinition对象并注册到beanFactory,为后续的实例化做准备。

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

@[TOC] spring解析流程----》 xml+注解
#spring是目前java开发中一个非常重要的框架,基本上目前各种项目都和他有关,spring完美的实现了对象和创建和管理,使得我们的开发人员不用关注对象创建和管理,主需要关注自己的业务实现即可,这样也提高了开发人员的开发效率。所以我们有必要了解spring的基本原理,spring是一个综合性的框架,所以涉及的内容非常多,我会分多篇文章进行介绍spring相关的重要知识点,本篇文章主要从源码讲解spring加载xml和解析注解的实现原理。

part1:BeanDefinition对象

在解析之前,先介绍一个对象:BeanDefinition对象,在spring中,对象的时间,只有一种途径,就是所有对象都是先封装成BeanDefinition对象,然后spring对BeanDefinition进行实例化,所以我们又必要了解这个对象的基本信息,这里主要讲GenericBeanDefinition这个对象: 在这里插入图片描述
上面这些属性都是xml,获取注解解析的时候需要填充的信息
(1)、id:Bean 的唯一标识名。它必须是合法的 XMLID,在整个 XML 文档中唯一。
(2)、name:用来为 id 创建一个或多个别名。它可以是任意的字母符合。多个别名之间用逗号或空格分开。
(3)、class:用来定义类的全限定名(包名+类名)。只有子类 Bean 不用定义该属性。
(4)、parent:子类 Bean 定义它所引用它的父类 Bean。这时前面的 class 属性失效。子类 Bean 会继承父类 Bean 的所有属性,子类 Bean 也可以覆盖父类 Bean 的属性。注意:子类 Bean 和父类 Bean 是同一个 Java 类。
(5)、abstract(默认为”false”):用来定义 Bean 是否为抽象 Bean。它表示这个 Bean 将不会被实例化,一般用于父类 Bean,因为父类 Bean 主要是供子类 Bean 继承使用。
(7)、lazy-init(默认为“default”):用来定义这个 Bean 是否实现懒初始化。如果为“true”,它将在 BeanFactory 启动时初始化所有的 SingletonBean。反之,如果为“false”,它只在 Bean 请求时才开始创建 SingletonBean。
(8)、autowire(自动装配,默认为“default”):它定义了 Bean 的自动装载方式。
1、“no”:不使用自动装配功能。
2、“byName”:通过 Bean 的属性名实现自动装配。
3、“byType”:通过 Bean 的类型实现自动装配。
4、“constructor”:类似于 byType,但它是用于构造函数的参数的自动组装。
5、“autodetect”:通过 Bean 类的反省机制(introspection)决定是使用“constructor”还是使用“byType”。
(10)、de

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值