Spring源码解析(一)

it2022-05-05  164

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();方法获取配置文件流。


最新回复(0)