`
hepeng19861212
  • 浏览: 146892 次
  • 性别: 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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics