`
hepeng19861212
  • 浏览: 151050 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring源码阅读——1.spring-core-3.2.9

    博客分类:
  • java
 
阅读更多

spring-core是spring一系列框架的基本工具包,其中主要包括几类工具:字节码增强、访问注解、数据类型转换等。

package说明:

org.springframework.asm:字节码增强工具asm

org.springframework.cglib:字节码增强工具cglib

org.springframework.core:

org.springframework.core.annotation:方便访问注解的工具

org.springframework.core.convert:数据类型转换工具

org.springframework.core.enums:在jdk5之前,spring自己实现的枚举功能。目前已弃用。

org.springframework.core.env:系统环境(jdk环境参数:System.getProperties()、System.getenv())

org.springframework.core.io:访问资源(主要是文件系统,也有字节流、jboss VFS)的工具

org.springframework.core.serializer:java对象的字节流序列化和反序列化工具

org.springframework.core.style:用来控制java对象输出为string的string风格

org.springframework.core.task:封装了一套同步和异步执行任务的executor。(没有使用线程池)

org.springframework.core.type:访问class meta的工具

org.springframework.util:其他工具,与core包不同的是,这个包的工具可以独立于spring框架而存在;而core工具主要还是为spring框架所用,与spring结合比较紧密。

 

 

------------------------org.springframework.core.annotation-------------------------

AnnotationAttributes本质上是一个Map<String, Object>集合,继承LinkedHashMap,用于保存某个注解实例的全部属性(属性名和对应的属性值)。

OrderComparator,是Ordered对象的比较器,对外提供了两个静态的排序方法public static void sort(List<?> list)、public static void sort(Object[] array)。

AnnotationAwareOrderComparator 是对OrderComparator的增强(继承),可以对Ordered对象、使用@Order注解的对象进行比较。跟OrderComparator一样提供了如上两个静态的排序方法。

AnnotationUtils中包含了很多比较好用的方法:

getAnnotation(AnnotatedElement, Class<T>)

getAnnotations(Method)

getAnnotation(Method, Class<A>),和getAnnotation(AnnotatedElement, Class<T>)一样能获取函数上面注解,此外还能正确处理编译器生成的bridge methods。

 

findAnnotation(Method, Class<A>)

findAnnotation(Class<?>, Class<A>)

findAnnotationDeclaringClass(Class<? extends Annotation>, Class<?>)在clazz及其父类上递归查找注解,如果有,则返回注解所在的clazz。

findAnnotationDeclaringClassForTypes(List<Class<? extends Annotation>>, Class<?>)与findAnnotationDeclaringClass与唯一不同的是,它支持List中的多个注解,只要查找到其中一个注解,即返回该注解所在的clazz。

getAnnotation*与findAnnotation*的区别是:前者是访问class自身的注解,而后者是查找class及其父类、接口上的注解。

 

isAnnotationDeclaredLocally(Class<? extends Annotation>, Class<?>)判断该注解是否就在该class上(不包括该class的接口和父类)。

isAnnotationInherited(Class<? extends Annotation>, Class<?>)与isAnnotationDeclaredLocally相反,判断该注解是否就在该class的接口或父类上。

 

getAnnotationAttributes(Annotation)

getAnnotationAttributes(Annotation, boolean)

getAnnotationAttributes(Annotation, boolean, boolean)

获取注解的所有属性(返回AnnotationAttributes

 

getValue(Annotation)

getValue(Annotation, String)

getDefaultValue(Annotation)

getDefaultValue(Annotation, String)

getDefaultValue(Class<? extends Annotation>)

getDefaultValue(Class<? extends Annotation>, String)

获取注解的value值以及value的默认值

------------------------org.springframework.core.convert-------------------------

对外提供的API接口主要是DefaultConversionService

TypeDescriptor是表示对java中所有数据类型的描述,包括Collection、Map、自定义Object、数组、基本数据类型及其包装类型。它被成对地用于

GenericConversionService中,表示从src类型到target类型的转换,会有一个相应的converter实现与之对应。

把AbstractDescriptor的子类实例转为TypeDescriptor,提供了几个静态工厂方法:

valueOf(Class<?>)

collection(Class<?>, TypeDescriptor)

map(Class<?>, TypeDescriptor, TypeDescriptor)

array(TypeDescriptor)

nested(MethodParameter, int)

nested(Field, int)

nested(Property, int)

forObject(Object)

为了提高性能,对基本数据类型及其包装类型做了cache。 

------------------------org.springframework.core.env-------------------------

 从类图中,可以看出,最终目的是提供了一个代表系统环境的StandardEnvironment,包括对System.getProperties()、System.getenv()的访问。在spring web中StandardServletEnvironment继承了StandardEnvironment,又增加对servlet容器系统参数的访问。

 

 ------------------------org.springframework.core.io------------------------

IO包存在的意义是:

供外部调用的入口API主要是:FileSystemResourceLoader、ClassRelativeResourceLoader。

spring web、spring context等模块也会自定义覆盖/实现ResourceLoader的子类和子接口。

------------------------org.springframework.core.serializer------------------------

 java对象的字节流序列化和反序列化。比较简单,略去不谈。

------------------------org.springframework.core.style------------------------

略。

------------------------org.springframework.core.task------------------------


1.从UML图中不难看出,该包主要是为spring scheduling模块提供接口支持。

2.实现了两个适配器,分别是:TaskExecutorAdapter,将Executor适配为TaskExecutor;ExecutorServiceAdapter,将TaskExecutor适配为Executor/ExecutorService。

3.提供了一个简单的异步TaskExecutor的实现:SimpleAsyncTaskExecutor。它继承CustomizableThreadCreator,用来创建线程并给线程命名(有意义的名字),需要注意的是它并没有使用线程池。ConcurrencyThrottleSupport:在SimpleAsyncTaskExecutor中用于控制并发,应用了生产者-消费者模式。

------------------------org.springframework.core.type------------------------



 对外暴露的、可直接使用的API接口为:CachingMetadataReaderFactory。基于ASM,使用了访问者设计模式,使用cache来避免了对class的重复加载和解析。

------------------------org.springframework.core.*.class------------------------

AliasRegistry、SimpleAliasRegistry:别名注册,保存的是Map from alias to canonical name,解决了别名循环的问题。

CollectionFactory:提供了几个静态函数,Collection createCollection(Class<?> collectionType, int initialCapacity),Map createMap(Class<?> mapType, int initialCapacity)等等。

Constants:提供了对一个类中public static final且名字为大写的字段的访问。

ControlFlow、ControlFlowFactory:判断当前运行的堆栈中是否包含某个class或某个函数。

DecoratingClassLoader:供其他包来继承的一个抽象类,加载时可以让使用者有选择的排除掉某些class和某些package下的class。

ExceptionDepthComparator:用来比较exception和targetException深度的比较器。对外提供了一个静态工具方法:Class<? extends Throwable> findClosestMatch(Collection<Class<? extends Throwable>> exceptionTypes, Throwable targetException)

GenericCollectionTypeResolver:一个很有用、很强大的工具类,用来获取Collection中元素的类型、Map中的Key/Value类型。

GenericTypeResolver:工具类,获取函数的参数类型、返回类型。

 

LocalVariableTableParameterNameDiscoverer、ParameterNameDiscoverer:基于ASM,获取函数和构造器的参数名字。

SpringProperties:加载spring.properties到Properties中,并访问其中的属性。

------------------------org.springframework.util------------------------

BooleanComparator:对Boolean数据进行排序(顺序和逆序)用到的比较器;

ComparableComparator:适配Comparable的Comparator。

CompoundComparator:组合模式。多个Comparator组合成一个Comparator

InstanceComparator:Compares objects based on an arbitrary class order

InvertibleComparator:可逆的比较器。(装饰者  设计模式。)

NullSafeComparator:将一个只能对非null对象排序的比较器,装饰成一个可以对null对象排序的比较器。(装饰者  设计模式。)

ClassUtils:class工具类。包括装载class,访问class名字、包名、函数、构造器、class类型是否是基本类型、接口等等。还记得Classloader.loadClass()与Class.forName()的区别吗?

CollectionUtils:封装了少数几个集合工具的静态方法。

CompositeIterator:多个迭代期组合到一起的迭代期,使用了组合设计模式。

ConcurrentReferenceHashMap:与ConcurrentHashMap不同的是,它的key和value存的是是软引用或弱引用(可在构造器中指定)

 PropertiesPersister、DefaultPropertiesPersister:实现了对Properties的加载和存储。

 FileCopyUtils:在File、byte[]、IO流之间的转换。

 FileSystemUtils:对文件、文件夹的递归删除和递归拷贝。

LinkedCaseInsensitiveMap:对key大小写不敏感的LinkedHashMap实现。

LinkedMultiValueMap:一个key映射多个value的Map结构。

MethodInvoker:将方法、object、class、方法参数 封装进来,以供该方法的调用。

NumberUtils:将string转为制定类型的Number。

ObjectUtils:实现了 基本数据类型及其数组的hashcode,基本数据类型及其数组的toString()方法等等。

PropertyPlaceholderHelper:提供了两个重载函数replacePlaceholders,用来替换字符串value中中的占位符。

ReflectionUtils:提供了访问field、method、函数调用等工具方法。

SerializationUtils:java序列化和反序列化

ResourceUtils:Utility methods for resolving resource locations to files in the file system.

StopWatch:对任务执行时间的统计,包括总时间、每个任务的执行时间。

StreamUtils:IO字节流和字节数组之间的拷贝。

StringUtils:字符串为空、长度、trim操作、等等。

SystemPropertyUtils:与PropertyPlaceholderHelper不同的是,它使用System.getProperty()来替换占位符。

TypeUtils:boolean isAssignable(Type lhsType, Type rhsType)

 

 

 

  • 大小: 432.6 KB
  • 大小: 337.4 KB
  • 大小: 472.1 KB
  • 大小: 236.8 KB
  • 大小: 103.4 KB
  • 大小: 288.6 KB
分享到:
评论

相关推荐

    org.springframework.web.struts-3.1.0.M2.jar

    《Spring与Struts整合——基于org.springframework.web.struts-3.1.0.M2.jar的实践探索》 在Java Web开发领域,Spring框架以其强大的依赖注入和面向切面编程能力,以及丰富的模块支持,成为了广大开发者青睐的框架...

    spring-framework-3.2.9.RELEASE 源码下载

    spring-framework-3.2.9.RELEASE 源码下载。 GitHub :https://github.com/spring-projects/spring-framework/tags/v3.2.9.RELEASE

    SSHSecureShellClient-3.2.9.exe--ssh连接工具

    SSHSecureShellClient-3.2.9.exe--ssh连接工具;用于连接linux,unix操作系统

    spring-aop-3.2.9.RELEASE.jar

    spring-aop-3.2.9.RELEASE.jar,java 开发常用工具包,基本满足spring的基础使用开发

    spring-framework-3.2.9.RELEASE.zip

    Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean...

    SSHSecureShellClient-3.2.9.exe

    SSHSecureShellClient-3.2.9.exe

    spring-instrument-tomcat-3.2.9.RELEASE.jar

    spring-instrument-tomcat-3.2.9.RELEASE.jar

    odps-jdbc-3.2.9-jar-with-dependencies.jar

    odps-jdbc-3.2.9-jar-with-dependencies.jar 是阿里云 MaxCompute(开放数据处理服务,ODPS)平台的 JDBC 驱动程序,专为大数据处理和分析而设计。此版本的驱动程序包含所有必要的依赖库,简化了开发人员在 Java ...

    spring-struts-3.2.9.RELEASE.jar

    spring-struts-3.2.9.RELEASE.jar , java开发包,搭建框架必备,欢迎下载!

    spring-test-3.2.9.zip

    《Spring Test 3.2.9:单元测试与JUnit的深度整合》 在软件开发过程中,单元测试是一项至关重要的任务,它确保了代码的正确性和稳定性。Spring框架提供了Spring Test模块,专门用于支持Spring应用程序的测试,而...

    redis-3.2.9.tar.gz+redis-3.2.1.gem.rar

    这是一个针对Redis 3.2.9版本的源码包,`.tar.gz`是Linux/Unix系统中常用的归档和压缩格式。解压这个文件后,你可以得到Redis的源代码,包括所有必要的头文件、C语言实现以及配置脚本等。以下是一些关于安装和配置...

    xfire jar.zip

    commons-httpclient.jar ...wstx-asl-3.2.9.jar xbean-spring-2.8.jar xfire-all-1.2.6.jar xfire-jsr181-api-1.0-M1.jar xfire-spring-1.2.6.jar xml-apis-1.0.b2.jar XmlSchema-1.1.jar xmlsec-1.3.0.jar

    spring-test-3.2.9.RELEASE.jar中文-英文对照文档.zip

    (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...

    spring-context-3.2.9.RELEASE.jar中文-英文对照文档.zip

    (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...

    datanucleus-rdbms-3.2.9-API文档-中文版.zip

    赠送jar包:datanucleus-rdbms-3.2.9.jar; 赠送原API文档:datanucleus-rdbms-3.2.9-javadoc.jar; 赠送源代码:datanucleus-rdbms-3.2.9-sources.jar; 赠送Maven依赖信息文件:datanucleus-rdbms-3.2.9.pom; ...

    spring-framework-3.2.13.release-dist.zip

    1. **依赖注入(Dependency Injection,DI)**:Spring 3.2.13继续强化了DI特性,允许开发者通过配置文件或注解来管理对象间的依赖关系,降低了代码的耦合度,提高了代码的可测试性和可维护性。 2. **面向切面编程...

    eudev-3.2.9.tar.gz

    eudev-3.2.9.tar.gz

    spring-framework-3.2.17.RELEASE-dist.zip

    《Spring框架3.2.17版本详解》 Spring框架,作为Java开发中的核心组件,以其模块化、轻量级和强大的功能深受开发者喜爱。3.2.17.RELEASE是Spring框架的一个稳定版本,提供了丰富的特性以支持企业级应用的开发。本文...

    cxf至少需要的jar包下载,集成Spring cxf jar下载

    cxf与spring集成 需要最少的jar如下: cxf-2.3.3.jar geronimo-annotation_1.0_spec-1.1.1.jar geronimo-jaxws_2.2_spec-1.0.jar geronimo-stax-api_1.0_spec-1.0.1.jar geronimo-ws-metadata_2.0_spec-1.1.3.jar ...

Global site tag (gtag.js) - Google Analytics