spring源码之基础模块构成

172 阅读5分钟

spring的整体架构

core Containercore container(核心容器)包括:Core,Beans,context和Expression Language模块

Core&Beans

Core&Beans:是模块框架的基础,主要是提供了IOC(控制反转)和注入,主要的基础知识是BeanFactory,提供了工厂模式的经典实现来消除对程序单例的需要,并真正允许从程序中分离出关系依赖和配置。

core

core:可以理解为spring框架的核心工具类,我还没看这部分的源码,姑且认为是我们平时写的util的工具包封装在一起的,那么既然是工具类其他所有的Spring模块都可以使用这个core包里面的内容,Core是其他基础的核心,我们平时的代码也可以用到,那么我去找找我用到的例子,直接在我平时工作的代码中搜索,目的是了解这个core就是个工具类。

比如我代码中有个过滤器有两个过滤器,我需要顺序加载,用注解@Order(),这个Order就是import org.springframework.core包里面的。说明:@Order(1)和@Order(2)表示先执行@Order(1)找个过滤器再执行Order(2)过滤器。 引入包:

import org.springframework.core.annotation.Order

image.png

Beans

Beans:该模块是所有应用都会用到的,它包含访问的配置文件,创建和管理bean以及进行Inversion of Control/Dependency Injection(IOC/DI)操作相关的核心类。那么代码中找找!发现我们经常用的注入注解 @Autowired就是这个import org.springframework.beans包下面的。

import org.springframework.beans.factory.annotation.Autowired

image.png

Context

Context模块构建于Core和Beans模块基础之上,提供一种类似于JNDI注册器的框架式对象访问。JNDI(Java Naming and Directory Interface ),类似于在一个中心注册一个东西,以后要用的时候,只需要根据名字去注册中心查找,注册中心返回你要的东西。Context继承了Beans的特性,为spring核心提供了大量的扩展。再去代码中找找!发现我同样的代码里面的注解@RefreshScope表示开启动态刷新配置的注解,就是import org.springframework.cloud.context下面的包。

import org.springframework.cloud.context.config.annotation.RefreshScope;

image.png

Expression Language

Expression Language:该模块提供了一个强大的表达式语言用于在运行时查询和操作对象,它是JSP2.1中规范的定义的unfied expression language的一个扩展,该语言支持设置和获取属性的值,属性的分配,方法的调用,访问数组上下文,容器和索引器,逻辑和运算符,命名变量及从spring的IOC容器中根据名称检索,它也支持list投影,选择和一般的list聚合。很陌生去代码中看看有没有用到。其实在使用xml的属性配置的时候就会用到SpEL表达式。我这项目没有用到xml那么写一个试试。# {}就是SpEL表达式的写法。

 <bean id="test" class="cn.thinkjoy.springboot.upms.dto.ResDto">
        <property name="userinfo" ref="user"></property>
        <property name="account" value="#{user.account}"></property>
    </bean>

Data Access/Integration

Data Access/Integration 包含JDBC、ORM、OXM、JMS和Transaction模块

JDBC

JDBC:该模块提供了JDBC的抽象层,可以消除连接数据库的JDBC的编码和解析数据库厂商的错误代码,包含了Spring对JDBC数据访问封装的所有类

ORM

ORM:对象-关系映射API,如JPA,JDO,iBitis等,提供了一个交互层,利用ORM的封装可以混合使用所有Spring提供的O/R映射

Spring框架支持若干的ORM框架,从而提供了ORM的对象关系,所有这些都遵从Spring的通用事务和DAO的异常层次架构。

OXM

OXM:该模块提供了一个对Object/XML映射实现的抽象层,其映射实现包括:JAXB,Castor,XMLBeans,JIBX和XStream。

JMS

JMS:(java Message Service)该模块主要包含一些生产消息和消费消息的特性

Transaction

Transaction:该模块支持编程和声明性事务管理,这些事务类必须实现特定的接口,并且对所有的POJO都使用。

Web

Web上下文模块建立在应用程序的上下文模块之上,为基于应用程序提供上下文,Spring框架支持与Jakarta Struts的集成,Web模块还简化了多部分请求以及将请求参数绑定到域对象的工作,Web层包含了Web、Web-servlet、Web-struts和Web-Porlet模块。

Web模块

Web模块:提供了提供了基础面向web的应用上下文,例如:多文件上传,使用servlet listeners初始化IOC容器以及面向Web的应用上下文。

Web-Servlet模块

Web-Servlet模块:该模块包含Spring的model-view-controller(MVC)的实现,Spring MVC框架使得各模型内的代码和web forms之间能够清楚的分离开来,并与Spring框架的其他特性集成在一起。

Web-Struts模块

Web-Struts模块:提供了对struts的支持,使得类在Spring应用中能够与一个典型的Struts web层集成在一起,该支持在Spring3.0支持的是deprecated的。

Web-Porlet模块

Web-Porlet模块:提供了用于Porlet环境和Web-Servlet模块的MVC实现。

AOP

AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现,它让你可以定义例如方法的拦截器和切点,从而将逻辑代码分开,降低他们之间的耦合性,利用source-level的元数据功能,还可以将各种行为数据合并到代码中去。

通过配置管理特性,Spring AOP模块直接将面向切面的功能集成到Spring的容器中,Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务,通过使用Spring AOP,不用依赖EJB组件,就可以将声明式事务集成到应用程序中。

  • Aspects模块提供了对AspectJ的集成支持。
  • Instrumentation模块提供了class instrumentation的支持和classloader实现,使得可以在特定的应用服务器上使用

TEST

TEST:支持使用JUnit和TestNG对Spring组件进行测试。

总结

简单对Spring个模块的构成和各个模块都有什么分工和作用进行了简单的了解。