Spring源码解析(一)

本文深入剖析Spring框架的核心组件,包括AspectJ的使用方法、Bean的生命周期与配置流程、DefaultListableBeanFactory的工作原理以及XmlBeanDefinitionReader的配置文件解析过程。

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

Spring源码解析(一)

本系列总结Spring源码深度解析这本书,因为已经读了70页,所以前面的稍微过一下,第三章开始重点解析。

知识点一:

AspectJ的用法:
比如有一个HelloWorldl类:

public class HelloWorld {
	public void sayHello () {
		System .out .println (”HelloAspectJ1”);
		public static void main (String args [] ) {
		HelloWorld h = new Helloworld();
		h.sayHello () ;
	}
}

使用AspectJ插件后,在sayHello方法前后添加逻辑,只需要这样做:

public aspect TxAspect {
	void around() : call (void sayHello ()) {
		System.out.println (”Transa ction Begin”),
		proceed() ;
		System.out println (”Transaction End ” ) ;
	}
}
知识点二:

bean的使用流程:

public class MyTestBean {
	private String testStr = ”testStr ”;
	public String getTestStr () {
		return testStr ;
		public void setTestStr(String testStr) {
		this.testStr = testStr ;
	}
}

配置文件:

<xml version = ” 1. 0” encoding = ” UTF - 8 ” ?>
<beans xmlns=” http : //wwwSpringframework . org/schema/beans ”
	xmlns : xsi= ” http : //www . w3 . org/2001/XMLSchema- instance "
	xsi : schemaLocation= ” http : //www . Springframework . org/schema/beans http : //www .
Spring:ramework.org/schema/beans/Spring-beans.xsd " >
<bean id=”myTestBean”  class=”bean.MyTestBean” />
</beans>

测试代码:

@SuppressWarnings( " deprecation ” )
public class BeanFactoryTest {
	@Test
	public void testSirnpleLoad() (
		BeanFactory bf = new XrnlBeanFactory (new ClassPathResource (”beanFactoryTest.xml”));
		MyTestBean bean=(MyTestBean) bf.getBean(” rnyTestBean”);
		assertEquals (” testStr ”, bean getTestStr()) ;
	}
}

这段代码做了以下事情:

  • 读取自己直文件beanFactoryTest.xml
  • 根据beanFactoryTest.xml 中的配置找到对应的类的配直,并实例化。
  • 调用实例化后的实例。
知识点三:
代码注册和加载bean的核心类:DefaultlistableBeanFactory

DefaultlistableBeanFactory中用到的类:
AliasRegistrγ : 定义对alias 的简单增删改等操作。
SimpleAliasRegistry : 主要使用map 作为alias 的缓存,并对接口AliasRegistry 进行
实现。
SingletonBeanRegistry :定义对羊例的注册及获取。
BeanFactory :定义获取bean 及bean 的各种属性。
DefauItSringletonBeanRegistry :对接口SingletonBeanRegistry 各函数的实现。
25
HierarchicalBeanFactory :继承BeanFactory ,也就是在BeanFactory 定义的功能的基础
上增加了对parentFactory 的支持。
BeanDefinitionRegistry : 定义对BeanDefinition 的各种增删改操作。
FactoryBeanRegistrySupport :在DefaultSingletonBeanRegistry 基础上增加了对FactoryB巳an
的特殊处理功能。
ConfigurableBeanFactory :提供配直Factory 的各种方法。
ListableBeanFactory :根据各种条件获取bean 的配直清单。
AbstractBeanFactory :综合FactoryBeanRegistrySupport 和ConfigurableBeanFactory 的
功能。
AutowireCapableBeanFactory :提供创建bean 、自动注入、初始化以及应用b巳an 的后
处理器。
AbstractAutowireCapableBeanFactory :综合AbstractBeanFactory 并对接口AutowireCapable
BeanFactory 进行实现。
ConfigurableListableBeanFactory : Beanfactory 配直清单,指定忽略类型及接口等。
DefaultListableBeanFactory : 综合上面所有功能, 主要是对bean 注册后的处理。

配置文件的读取核心类:XmlBeanDefinitionReader

ResourceLoader :定义资源加载器,主妥应用于根据给定的资源文件地址返回对应的
Resource 。
BeanDefinitionReader :主要定义资源文件读取并转换为BeanDefinition 的各个功能。
Environm巳ntCapabl e :定义获取Env ironment 方法。
DocumentLoader :定义从资源、文件加载到转换为Document 的功能。
AbstractBeanDefinitionReader :对EnvironmentCapabl e 、BeanDefinitionReader 类定义的
功能进行实现。
BeanDefinitionDocumentReader :定义读取Docuemnt 并注册BeanDefinition 功能。
BeanDefinitionParserDelegate :定义解析Element 的各种方法。

XmlBeanDefinitionReader如何解析配置文件分为以下几步:
  • 通过继承向AbstractBeanDefinitionReader 中的方法,来使用Resour Loader 将资源文件
    路径转换为对应的Resource 文件。
  • 通过DocumentLoader X才Resource 文件进行转换,将Resource 文件转换为Document 文件。
  • 通过实现接口BeanDefinitionDocumentReader
    的DefaultBeanDefinitionDocumentReader 类 对Document
    进行解析,并使用BeanDefinitionParserDelegate 对Element 进行解析。
知识点四:

Resource是获取配置文件的接口,实现类有UrlResource,InputStreamResource,ByteArrayResource,FileSystemResource,ClassPathResource等,提供resource.getinputStream();方法获取配置文件流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

97年的典藏版

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值