Spring 框架各模块的特性及使用的编程模型

Spring 框架各模块的特性及使用的编程模型

Spring各模块及特性

以下内容使用版本为 Spring Framework 5.2.13 RELEASE,模块名称都为简写,如 aop 等同于 spring-aop模块

  • aop,面向接口或者切面编程

    aopalliance,AOP的核心advice标识和抽象反射拦截。

    aop,AOP的核心

  • aspects,spring对aspects的支持

    包含 beanscachecontext annotationschedulingtransacation

  • beans和contexts(涉及三个模块 context、context-indexer、context-support),两个模块合起来是Spring IOC的重要核心实现,前提是两者都依赖core模块

    beans,包含操作Java bean的接口和类。

    context,包含cache、context、ejb、format、jndi等等相关包以及相关内容。

    indexer,用于读取和管理组件索引

    support,包含cache、mail、scheduling、ui freemarker相关包以及相关内容。

  • core,核心模块,包含对 Java 语法支持等等

    主要包含对asm、cglib、core、lang、objenesis、util的支持

  • expression,Spring应用程序上下文中表达式语言的解析支持,从 Spring 3 开始引入,类似jsp的EL语言

  • instrument,从Spring 2 开始支持 Java的装配,以及对 Java agent的支持

  • jcl,从 Spring 5 开始,是 Spring 新型的日志框架,用来帮助 Spring 进行统一的日志管理

  • jdbc,JDBC相关内容,Spring 对JDBC的包装,使JDBC更加容易使用,并减少了常见错误的可能性

  • jms,Java message service,即 Java 消息服务,Spring 希望通过 api 方式来实现 Java message 的统一实现。

  • messaging,Spring 针对消息服务的统一实现,有对应的API 和实现,包括 kakfa ,rabbitmq,rocketmq等

  • orm,O/R Mapping集成类的根目录,包含 Spring 对 jpa 或 hibernate 等整合实现,

  • oxm,O/X Mapping集成类的根目录,xml的编列,marshal 和 unmarshal,是xml的序列化和反序列化

  • test,测试,包含了mock、testcontext、springmvc 和 webclient 的测试,一般不需要日常maven引入,或者代码里可以通过来排除

  • tx ,transaction,Spring的事务抽象,借鉴了 JavaEE 中 jpa 的事务实现和 jdbc 的事务实现,来统一封装事务。

  • web

    http,HTTP客户端和服务端的抽象

    remoting,Spring 远程处理

    web , 公共的、通用接口,用于定义Spring的Web基础架构和其他框架模块之间的最小边界点。

  • webflux,其中包含DispatcherHandler,这是WebFlux服务器端点处理的主要入口点,包括用于将请求映射到处理程序,调用它们并处理结果的关键协定。

  • webmvc,提供应用程序上下文、Spring Web MVC框架的核心接口和类集成的servlet。

  • websocket,websocket相关的通用抽象和Spring 配置

Spring 中用到的编程模型
面向对象编程
  1. 契约接口:Aware、BeanPostProcessor……
  • Aware:接口处理,大部分接口继承并加入对应的set*方法,如ApplicationContextAware、BeanFactoryAware

  • BeanPostProcessor :Bean生命周期的后置处理,里面运用了 Java 8 的 default 方法实现

  1. 设计模式:观察者模式、组合模式、模板模式……
  • 观察者模式:ApplicationEvent,基于Java Event实现

  • 组合模式:Composite

  • 模板模式:JdbcTemplate

  1. 对象继承:Abstract* 类,Spring 中有很多抽象类
面向切面编程
  1. 动态代理:JdkDynamicAopProxy

  2. 字节码提升:ASM、CGlib、AspectJ

面向元编程
  1. 注解:模式注解(@Component、@Service、@Respository…)
  • java 语言规范注解之间不能有继承关系,所以 Spring 中很多注解都是派生的关系

  • @Component:组件,@Respository/@Service/@Controller都是@Component的派生注解

  1. 配置: Environment抽象、PropertySources、BeanDefinition…
  • Environment抽象:
    • 从 Spring 3.1 开始引入,包含一些 Profiles,profile 可以认为是用户配置,可以对不同系统进行区分,如开发是 dev,生产环境是 prod
    • 包含一些属性,通过 PropertyResolver 中的 getProperty 来获取
  1. 泛型:GenericTypeResolver、ResolvableType…
  • ResolvableType
函数驱动
  1. 函数接口:ApplicationEventPublisher
  • Java 中的函数接口是 FunctionalInterface

  • Spring的函数接口有且仅有一个抽象方法,不包含Object中的方法以及default的实现

  1. Reactive:Spring WebFlux
  • WebFlux:
模块驱动
  1. Maven Artifacts

  2. OSGI Bundles

  3. Java 9 Automatic Modules

  4. Spring @Enable*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值