Spring源码阅读(spring-framework-5.2.24)

spring-aop:其它模块依赖的基础,提供核心功能,切点的定义,切面的逻辑编写与织入。

spring-aspects:提供更多的功能支持,声明式事务管理,缓存支持,异步防范支持等

spring-beans

spring-context

spring-context-indexer:用于生成spring应用程序的索引文件工具。可以分析类路径,生存包含所有组件的索引文件。使用了反射机制来扫描和解析应用程序的类路径。

spring-context-support:提供应用程序上下文相关的支持类和工具,简化Spring应用程序的开发和集成。上下文的创建和配置支持,资源加载和处理支持,国际化,任务调度,邮件发送

spring-core:

spring-expression:表达式语言,运行时对对象进行求值和操作。

spring-instrument:

spring-jcl:记录日志的抽象层。统一方式处理日志,不依赖于特定的日志实现,提供了一套统一的日志接口。核心类Log接口

spring-jdbc:与数据库交互,给予JDBC规范,封装JDBC API,提供模板类和辅助类,连接,查询,事务和操作等。核心类JdbcTemplate。dataSource接口用于管理数据库连接池,RowMapper

接口将结果集映射为对象。TransanctionTemplate 用于管理数据库事务。

spring-jms:用于支持消息队列的集成和消息传递。核心接口为JmsTemplate和MessageListenerContainer。JmsTemplate用于发送和接收消息的模板类,封装常见操纵,发送接收,事务等。MessageListenerContainer 用于管理消息监听器的容器,负责监听消息队列,将收到的消息传递给注册的消息监听器处理。

spring-messaging:支持消息传递和异步通信。基于消息中间件(message broker)的概念,通过消息发送者和接收者,实现程序间通信。核心接口为message和messageChannel。 message是消息内容和元数据。messageChannel为消息通道,发送和接收消息。spring提供了多种类型消息通道,如点对点,发布-订阅,广播等。其次,还有messageConverter用于将消息转换为特定的数据类型。messageHandler是一个处理接收消息的接口。

spring-orm:简化和支持与关系型数据库的交互。提供方式处理对象与关系数据库直接的映射和操作。支持多种ORM框架,比如jpa,hibernate,mybatis等。核心是SessionFactory(hibernate核心接口)和EntityManagerFactory(jpa的核心接口)。两个接口控制数据库的连接,查询,事务和操作等

spring-oxm:用于对象与xml之间的映射和转换。支持多种xml数据绑定技术,Castor,JAXB,XMLBeans和JIBX等,可以实现java对象与xml文档之间的转换。核定接口是marshaller 将java对象遍组为xml文档,Unmarshaller则将xml文档解组为java对象。一系列方法,控制编解组行为,如设置命名空间,处理循环引用,日期格式等

等等

第一步:

Tags · spring-projects/spring-framework · GitHub

找到相应的release版本

第二步:

下载相应版本的gardle,如何看版本

spring-framework/gradle/wrapper /gradle-wrapper.properties 

代码路径下

distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip

Gradle | Releases

下载gradle,idea配置gradle,像maven一样

第三步:

需要更换仓库,不用换gradle,直接在项目下更换,build.gradle下面

repositories {
        //该处增加
        maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}
		mavenCentral()
		maven {
			url "https://repo.spring.io/milestone"
			content {
				// Netty 5 optional support
				includeGroup 'io.projectreactor.netty'
			}
		}

第四步:idea自动构建

开始学习:

先读Spring-beans

AbstractPropertyAccessor 抽象类:访问和操作java属性的基类。可以获取属性,设置熟悉,判断是否可读可写等

具体实现类

BeanWrapperImpl:通过反射机制来访问或者操作对象属性。

DirectFieldAccessor:通过反射访问对象字段。

PropertyValues接口,用于定义方法属性值信息

AbstractNestablePropertyAccessor 是PropertyAccessor 的抽象类,用于访问和操作嵌套对象,访问和操作嵌套属性,可以获取属性,设置熟悉,判断是否可读可写等

BeanInfoFactory 是策略接口,用于创建BeanInfo实例,CachedIntrospectionResults会遍历已经发现的BeanInfoFactory,对每个工厂调用getBeanInfo

CachedIntrospectionResults通过SpringFactpriesLoader 工具类实例化。

BeanMetadataAttribute:表示bean相关的元数据属性,提供bean相关的附加信息,例如作用域/依赖关系等。可以定义自定义注解或标记,可以被框架或者其他组件用于执行特定操作。为bean添加数据,增强功能。

BeanMetadataAttributeAccessor:对BeanMetadataAttribute对象的访问和操作,获取修改该对象关联的元数据属性。

BeanMetadataElement:与bean相关的元数据元素,用于表示bean的来源、描述、资源等

BeanUtils:属性复制,属性获取和设置,属性类型转换,动态创建和操作javabean。

BeanUtils.instantiateClass 使用无参构造实例,并返回该实例

BeanWrapper:对javabean进行包装和操作,属性访问,类型转换,事件通知,元数据访问(属性名,属性类型,属性描述等)。

BeanWrapperImpl:

CachedIntrospectionResults:用于缓存javabean的内省结构,内省指的是通过反射机制获取和操作javabean的属性,方法和事件等信息,涉及到类结构分析和解析,比较耗时。避免重复内省,使用了缓存机制,将javabean和内省结果缓存起来。

ConfigurablePropertyAccessor:可配置的属性访问器,通过该访问器,获取设置和删除属性,还可以检查属性是否存在。

DirectFieldAccessor理解:直接字段访问器,获取、设置和删除对象的字段值,检查字段是否存在。

ExtendedBeanInfo 理解:提供对bean的扩展信息的访问,是beaninfo接口的扩展。获取bean的属性、方法、事件等详细信息。对bean的自定义编辑器、自定义显示和自定义持久化等扩展功能的支持。

PropertyDescriptorUtils理解:简化和辅助处理javabean的属性描述符,提供静态方法。获取属性的描述信息,比如属性的名称,类型,读写等

PropertyEditorRegistry:注册和管理属性编辑器(PropertyEditor),是beanWrapper接口的一部分,处理属性值的类型转换。用于注册和获取属性编辑器,通过编辑器可将属性与特定的属性类型进行关联,以便在需要的时候能自动使用属性编辑器进行属性值的类型转换,更方便的进行数据绑定和处理。

PropertyEditorRegistrar:用于注册属性编辑器(PropertyEditor)。可以被用于自定义注册属性编辑器的逻辑。

TypeConverter:是一个类型转换器,用于在不同类型间转换,用于处理属性值的类型转换。可以处理基本数据类型,字符串,集合,数组等类型,支持自定义类型。常于DataBinder一起使用,用于实现数据的绑定和类型转换。spring将字符串表示的属性值转换为java对象时,自动调用该类。

TypeConverterSupport:抽象类实现TypeConverter接口,提供便捷的方法进行类型转换。

Aware理解:用于bean能够感知spring某些特性和功能,实现Aware接口,bean可以于spring容器进行交互,获取额外信息和使用特定功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值