Spring特性总览
一、核心特性
二、数据存储
三、Web 技术
四、技术整合
五、测试
记录小马哥的讲解
为了避免从入门到劝退,本人把小马哥视频中讲解的语言记录下来了,部分语言稍作修改。
1、核心特性包括 第一,IoC 容器、老生常谈的啦。
第二,Spring 事件(是基于java的标准事件进行扩展的,但是和java的标准事件还有些区别,后面详细描述。)
第三,资源管理也是继承于Java的一些资源管理,有些API是借鉴了Java核心的底层API的一个实现。
第四,国际化,Java其实默认就支持国际化,因此Spring国际化也是基于Java API进行实践的。
第五,校验,Java JDK底层是没有提供的,是Spring自己做了一些特殊的一些API设置。比如借鉴Bean Validation, Spring在它的Framework里面做了Bean Validation的一个整合。
第六,数据绑定,在Java里面也没有特别实现,是Spring特有的实现。简单说是,外面的属性和Java 的 POJO的Setter、Getter来进行一个数据上的转化和绑定。
第七,类型装换,有了数据绑定,就会涉及到类型转换,也是Spring核心特性之一。能够帮助我们进行更好的有扩展性的类型转换。
第八,Spring 表达式,和JSP表达式是如出一辙的,在JSP里面可以通过符号的方式引用变量,达到实现动态调用的目的。
第九,面向切面编程,常说的AOP。
2、数据存储包括 第一,JDBC,关系型数据库务必会和JDBC打交道,只不过是在JDBC上面做了一些封装,比如MyBatis、Hibernete。JDBC是java API和数据库打交道的一个通道,Spring在此做了相应的实现,比如 jdbcTemplate。
第二,事务抽象,面试必考的内容,实际上来源于EJB, Spring 只不过在上面做了一些简化操作。事物的抽象在实现中有一个单独的API或者单独的规范来进行实现,Spring也只是做了一些简单的封装。
第三,DAO 支持,Spring做了很大的封装,简化DAO的一个写法和实现方式,比如常见的SQLException。
第四,O/R映射,早期了解到Spring对Hibernete的支持,Spring对JDO的支持,后面JPA替代了JDO,JPA默认的实现就是Hibernete,因此讨论JPA和讨论Hibernete是讨论一个东西。
第五,编列,把 xml 和Java的序列号进行对比的话,Java的序列化就相当于这里的编列,反序列化就是反编列。熟悉JAXB(Java API for XML Binding)的话,会对此有了解。
3、Web技术包括 Web Servlet 技术栈,Web Reactive 技术栈。
第一,按照版本的分布, Web Servlet 技术栈是从Spring 1 到 Spring 4版本的唯一支持,从Spring 5才开始引入Web Reactive 技术栈。
第二,Reactive 技术栈包括Spring WebFlux、Spring MVC,其实这两个在注解上面是一模一样的,只是底层的实现发生了变化。传统的Spring MVC是需要Servlet引擎进行支撑的。
第三,Reactive通常默认情况下是Netty的 Web server。当然Reactive也是可以运用Spring MVC 的引擎进行实现的,也就是说可以用到Servlet引擎进行实现。于此不同的是Servlet规范里面在3.0以后规划是对websocket进行支持,那么Web Servlet 技术栈也会有这方面的支持。关于SockJS也是一个技术栈,这里不做讨论。
第四,关于 Reactive的两个部分理解,一个是WebSocket,一个是WebClient,在早期的时候,Spring框架5.0之前,有个东西叫RestTemplete或者叫HttpClient是一个同步的Http的执行客户端,那么WebClient引用之后,它把过去的同步执行变成异步回调的方式。其实Web Reactive和Spring MVC 几乎如出一辙,只不过在API封装上面做出了一些变化。
4、技术整合,内容比较庞杂,相当于是一个生态的整合。
第一,远程调用(Remoting ),有几种方式的实现,比如:RMI, Java标准的远程方法调用; Hessian社区开源的一个方案,Dubbo是基于Hessian协议的。那么Spring Framework做了一层封装,无论你是基于HTTP的调用还是常说的Hessian调用,都可以通过统一的封装来执行方法的调用得到结果。和之前讲的Reactive不同点是,通常来说远程的调用是采用同步的模式。那么异步的模式如下面所讲的Java的消息服务。
第二,消息服务(JMS),全称Java Message Service,这是一个异步的调用用传统的JMS规范来实现。比如说ActiveMQ,但是Kafka, RocketMQ,等并不是用传统的JMS规范来实现的。
第三,Java 连接架构,Java EE的一套架构,主要是统一一些Java的资源连接(如JDBC连接)。
第四,Java 管理扩展(JMX),全称 Java Management Extensions,用于Java的一个管理。对于大多数程序员来说,关注的是开源侧、开发侧,不太关注运维侧,比如,cpu利用率,磁盘利用率,都可以通过JMX来进行查询。
第五,Java邮件客户端,顶不住了,不写了,都是介绍,后面详细了解,这里了解目录大概。