Spring核心包介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/micro_hz/article/details/81747703

Spring框架是一个严格的分层的架构组织起来的框架,所有的其他模块都是依赖于核心的core模块构建的,这些模块组成了成个企业级开发的所有组建,可以选择性的依赖需要的模块即可,不需要依赖多余的模块,这样模块化的集成避免很多不必要的维护和后期迭代的问题。整个Spring框架的结构图如下,下面分别介绍一下各个模块的功能。
这里写图片描述
Core模块:构建应用的核心,主要提供了依赖注入的特性,其中一个最抽象的接口为BeanFactory,实现该结构的具体类可以通过读取一些bean的元数据例如xml文件和注解的形式配置加载到容器进行管理。
Aop模块:提供了切面编程的支持,它主要能够做到方法级别的动态代理,在编译阶段它是跳过的,是在运行时进行修改字节码或则动态实现代理类进行代理,它也使事务的管理变得简单,让事务的控制与业务代码隔离。
Dao模块:能够管理对于数据库的操作,打开连接池与释放连接池,也支持了声明事务与编程式事务。
ORM模块:提供流程的框架的ORM框架的组建.
J2EE模块:提供一些流程的J2EE组建,例如JDBC, JMX.
Web模块:提供对于常见mvc框架的支持,例如Struts和JSF。


核心的依赖关系是 core包为最基础的模块,beans包依赖core模块.aop又依赖于core和beans模块. context是一个独立的模块依赖于context-expression模块。context-support模块依赖于beans,context,core模块。tx模块依赖于beans与core, jdbc又依赖于tx.
我们首先来分析下core包和beans包:
这里写图片描述
asm和cglib包是spring对于字节码的支持,它能够更加灵活的和反射结合去修改字节码修改的东西,例如spring的aop动态代理就有基于cglib的动态字节码修改的方式,asm包为其提供技术支持。

  • core包提供一些核心的类与一些基本类抽象行为的接口。例如AliasRegistry为bean名称的定义抽象接口,AttributeAccessor为bean的元数据访问抽象接口。Ordered为一些复合操作的顺序抽象。包含了jvm一些spring的扩展.
  • beans包是spring容器核心的一些组件。例如所有容器的抽象BeanFactory,它抽象了容器的基本功能,基于它有一些扩展的容器功能抽象,例如ApplicationContext与ConfigurableListableBeanFactory等等,Spring自带很多容器的实现。BeanDefinitionRegistry抽象了存放bean的载体抽象,里面存放一个Map
    <”beanName,Bean”>定义抽象的数据结构。BeanDefinition就是bean对象的抽象.ResourceLoader抽象了对于配置资源加载资源的抽象,ResourcePatternResolver扩展了它并返回多个资源。完成的流程就是容器通过ResourceLoader去加载bean的元数据信息,然后并转换为BeanDefinition,最后存放在BeanDefinitionRegistry,提供给容器使用。beans包主要还是提供了容器的基本能力,并不给出具体的容器上下文实现。
  • context包给出了spring一些通用的上下文实现。ApplicationContext就是其中一个实现,它扩展了基本的容器的功能也包含了资源解析与容器时间通知与继承能力和国际化转换的能力。spring给出了默认的实现,其中主要的实现在AbstractApplicationContext当中,在整个容器加载过程中,我们有很多操作可以横切进去,干预容器的加载过程。例如BeanPostProcessor接口,就是能够在bean在装配完毕之后回调接口,还有一些Aware的接口例如ApplicationContextAware,它可以在容器起来之后对容器做一些事情,前提是这些自己扩展到的bean都被容器管理。

猜你喜欢

转载自blog.csdn.net/micro_hz/article/details/81747703
今日推荐