一、Spring 核心概念介绍
1、控制反转(IoC)与依赖注入(DI)
概念
IoC:一种将组件依赖项的创建和管理外部化的技术。
举例说明:小王要制造一支笔,以前需要小王自己亲手做,Ioc就是把这项工作让第三方小明(容器:如工厂)来生成和管理。
DI:一种运行时将对象(包含属性)经过容器,交给另外一个对象的技术。IoC与DI的关系相当于一枚硬币的两面,因此它们是一体两面的关系,在Spring的上下文中,这些概念术语可以互换,而不会有任何损失
举例说明:小王通过第三方小明(容器:如工厂)制造了一支铅笔(对象),然后在小罗要使用时,经由第三方小明转交给小罗,而不是小王直接交给小罗。
使用IoC/DI的优势与缺点
优势
- 减少粘合代码(代码可重用)
- 简化应用程序配置(从mysql换到oracle数据库,只需要简单的配置业务对象的适当依赖项)
- 能够在单个存储中管理常见依赖项(将依赖项集中管理,使管理更加简单并且不易出错)
- 改进可测试性(只需要单纯的测试业务代码,并且可以分层测试(dao层,service层,domain层,controller层等),使测试更加简单清晰)
- 培养良好的应用程序设计(减少工作量,专注于业务,而不是框架,并且多使用接口以达到解耦效果)
缺点
- 对不熟悉代码的人来讲,DI/IoC很难让他们知道某个特定依赖项的哪个实现与那个对象连接。
2、Spring 5的附加功能
- 支持Java 9
- 使用Spring 实现面向切面编程(AOP:Aspect Oriented Programming)
- 支持AspectJ风格的切入点表达式
- 支持@AspectJ注解(Spring 3.2开始)
- 在AspectJ中实现DI方面的支持
- 支持Spring A评评理cationContext中的加载时织入
- Spring 表达式语言
- 从Spring 3.0开始,引入了Spring表达式语言SpEL(Spring Exprssion Language),
- 是一种标准表达式语言,替代其他的表达式语言EL(Expression Language),做统一表达式语言UEL(Unified Expression Language)。
- Spring中的验证Validation,从Spring 4.0开始,JSR-349(Bean Validation)的1.1版本得到支持
- 在Spring中访问数据:对JDBC API进行了简化封装,对(Sql与NoSql数据库访问,建议研究Spring Data项目)
- Spring中的对象/XML映射(JavaBean与XML的相互转换)
- 管理事务(编程式以及声明式事务控制)
- 简化以及与JEE集成
- Web层的MVC(Spring WebFlux与Spring MVC)
- WebSocket支持(定义了一个用于在客户端和服务器之间穿件持久连接的API)
- 远程支持(RMI,JAX-WS,JMS,AMQP,REST等)
- 邮件支持
- 作业调度支持
- 动态脚本支持(Groovy,Jruby和BeanShell)
- 简化的异常处理(非检查型异常unchecked exceptions:RuntimeException与其子类,以及错误(Error))
二、Spring 项目以及替代品
1、Spring各项目
- Spring工具套件(Spring IDE和Spring Tool Suite(STS)工具)
- Spring Security(为web应用和方法级安全性提供全面的支持)
- Spring Boot(简化项目的创建工作)
- Spring 批处理和集成(Spring Batch和Spring Integration)
- 其他(Spring XD,Android for Spring,Spring Mobile,Spring Social 和 Spring AMQP,更多消息信息)
2、Spring的替代品
- JBoss Seam框架(与Spring的主要区别是JBoss完全基于JEE标准开发)
- Google Guice
- PicoContainer
- JEE 7 容器
以上内容均来自于《Spring 5 高级编程 第五版》清华大学出版社 第一章 Spring 介绍