1、概念:
Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:控制反转和AOP(Aspect Oriented Programing:面向切面编程)为核心,提供了展现层SpringMVC和SpringJDBC以及业务层事务管理等众多的企业级应用技术,还能整合市面上流行的第三方框架个类库。
1、full-stack:全栈
2、IOC:控制反转,是面向对象编程的一种设计原则,可以减少代码之间的耦合性,常见的方式叫做依赖注入(Dependency Injection,简称DI)。通过控制反转,对 象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖注入到对象中
3、依赖注入:当对象A需要对象B的时候IOC容器会自动创建B的对象给A
4、AOP:面向切面编程,通过预编译方式和运行期动态代理实现程序的统一维护的一种技术,利用AOP技术可以将日志记录、性能统计、安全控制、事务处理、异常处 理等代码从业务逻辑中划分出来,降低代码的耦合度和提高程序的可重性。
2、Spring优势
2.1 方便解耦,简化开发
通过IOC容器,可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。
2.2 AOP编程的支持
Spring支持 AOP面向切面编程,可以将非核心义务抽离出来,降低程序耦合性
2.3 方便继承各种优秀框架
3、框架体系
Srping至今集成了20多个模块,都分布在一下几个模块之中:
1、核心控制器(Core Container)
2、数据访问层(Data Access/Integration)
3、Web层
4、AOP(Aspect Oriented Programming)模块
5、植入(Instrumentation)模块
6、消息传输(Messaging)
7、测试(Test)模块
3.1 核心容器
Spring的核心容器由Spring-core、Spring-beans、Spring-context、Spring-context-suppor和Spring-expression等模块组成
3.1.1 Spring-core模块
提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和注入依赖(Dependency Injection,DI)功能
3.1.2 Spring-beans模块
提供了BeanFanctory,是工厂模式的一个经典实现,Spring将管理对象称为Bean
3.1.3 Spring-context模块
建立在Core和Beans模块的基础之上,提供一个框架式的访问方式,是访问定义和配置的任何对象的媒介。ApplicationContext接口和Context模块的焦点
ApplicationContext:Spring两大核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口,BeanFactory负责创建、管理、配置 Bean,ApplicationContext作为BeanFactory的子接口,也被称为上下文。Spring负责管理Bean和Bean之间的关系
Bean:是Spring最小的基本单位,在Spring中,Bean的是一个非常广义的概念,任何的Java对象、Java组件都被当成Bean处理。
ApplicationContext和BeanFactory的区别:最大的区别是创建对象的时间不一样,ApplicationContext是立即创建,一加载配置文件就创建对象,BeanFactory采用的是 延迟加载思想,即什么时候需要就什么时候创建;还有一个就是还提供了更完整的框架功能:国际化支持、aop、事务等
3.1.4 Spring-context-support模块
支持第三方库到Spring应用程序上下文,特别是用于高速缓存(EhCache、JCache)和任务调度(CommonJ、QuartZ)的支持。
Spring应用程序上下文:即ApplicationContext,你可以简单的理解成就是将你需要Spring帮你管理的对象放入容器的一种容器
3.1.5 Spring-expression模块
提供了强大的表达式语言去支持运行时查询和操作对象图。这是对JSP2.1规范中规定的统一表达式语言(Unified EL)的扩展。该语言支持设置和获取属性值,属性分配、方法调用、访问数组、集合和索引器的内容、逻辑和算术运算、变量的命名以及从Spring的IOC容器中以名称检索对象。它还支持列表投影、选择以及常用的列表聚合
3.2 AOP和Instrument
3.2.1 Spring-aop模块
提供了一个符合AOP要求的面向切面编程的实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净的解耦
3.2.2 Spring-aspects
提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架
3.2.3 Spring-instrument模块
提供了类植入(Instrumentation)支持和类加载器的实现,可以在特定的应用服务器中使用
3.3 消息
Spring4.0以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持
3.4 数据访问/集成
数据访问/集成层由JDBC、ORM、OXM、JMS和事务模块组成
3.4.1 Spring-jdbc模块
提供了一个jdbc的抽象层,消除了繁琐的JDBC编码和数据库厂商特有的错误代码解析
3.4.2 Spring-orm模块
为流行的对象关系映射(Object-Relational Mapping)API提供集成层,包括JPA和Hibernate。使用Spring-orm模块可以将这些O/R映射框架与Spring提供的所有其他功能结合使用,例如声明式事务管理
声明式事务:建立在AOP之上,其本质是对方法前后进行拦截,然后在目标方法开始之间创建或者加入一个事务,在执行完目标方法之后根据执行的情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,只需要在配置文件中做相关的事务规则说明(或者通过基于@transaction注解的方式),便可以将事务应用到业务逻辑中去
3.4.3 Spring-jms模块
指java消息传递服务,包含用于生产和使用消息的功能。
3.4.4 Spring-tx(事务)模块
支持用于实现特殊接口和所有POJO类的编程和声明式事务管理
3.5 Web
Web层由Spring-web、Spring-webmvc、Spring-websocket和WebFlux模块组成
3.5.1 Spring-wbe模块
提供了基本的web开发集成功能,例如文件长传功能、使用Servlet监听器初始化一个IOC容器及Web应用上下文
3.5.2 Spring-webmvc模块
也称为Web-Servlet模块,包含用于web应用程序的Spring MVC和REST WebServices实现。SpringMVC框架提供了领域模型代码和Web表单之间的清晰分离,并与Spring Framework的所有其他功能集成
3.5.3 Spring-websocket模块
Spring4.0以后新增的模块,它提供了WebSocket和SocketJS的实现
3.5.4 WebFlux模块
而WebFlux是一个典型非阻塞异步的框架
3.6 测试模块
Spring-test模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。