目录
什么是Spring框架?
Spring框架的模块组成?
内核容器(Core Container)
AOP和监测器(Instrumentation)
消息传递
数据访问/集成
Web
测试
Spring的两大核心:IOC/DI和AOP
IOC(控制反转)/DI(依赖注入)
AOP(Aspect Oriented Programing)面向切面编程
应用场景
主要目的
增强类型
Spring框架是以interface21框架为基础设计开发的轻量级开发框架,是为解决企业应用开发的复杂性而创建的。
Spring框架提供一站式开发,并与其他第三方框架进行整合,如果项目使用Spring,再使用其他框架,只需要把其他框架与Spring整合。
Spring框架不是某一层的框架,它管理我们整个项目的所有的对象。
Spring的口号:我们不会重复造轮子。
Spring框架是一个分层架构,由7个定义良好的模块组成。
Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图:
组成Spring框架的每个模块都可以单独存在,或者与其他一个或多个模块联合实现。
每个模块的功能如下:
内核容器是由spring-core,spring-beans,spring-context,spring-context-sup和spring-expression模块组成。
spring-core和spring-beans模块提供了框架的基本功能,包括IOC/DI特性。
BeanFactory是工场模式的实现。它不需要单独的编程逻辑就可以把所依赖的配置和规范从程序的实际逻辑中分离开。
spring-context模块是在spring-core和spring-beans模块的基础之上构建的。其继承了spring-beans模块的特性,并添加了国际化(i18n)(使用资源绑定的方式),事件传播,资源加载,以及通过Servlet容器透明创建的上下文环境。spring-context模块也支持Java EE特性,如EJB,JMX和基本的远程调用。ApplicationContext接口是spring-context模块的入口。
spring-context-support模块提供把常用的第三方类库(如缓存(EhCache、Guava、JCache)、邮件(JavaMail),计划(CommonJ、Quartz),以及模板引擎(FreeMarker、JasperReports、Velocity))集成到Spring应用场景中的支持。
spring-expression模块提供可用于运行时查询和操作对象的强大的表达式语言。它是JSP2.1规范中指定的统一表达式语言的一个扩展。它支持设置和获取属性值,属性匹配,方法调用,访问数组内容,集合和索引,逻辑和算术运算,命名变量,以及使用对象名从Spring容器中检索对象等功能,还支持列表的投射和选择以及常用的列表聚合。
spring-aop模块提供可定义的符合AOP联盟标准的面向切面编程的实现。
独立的spring-aspects模块提供AspectJ的集成。
spring-instrument模块提供类的检测支持,并且类的加载器实现可以被用于特定应用服务中。
spring-instrument-tomcat模块包含了Spring给Tomcat提供的监测代理。
Spring框架包含的spring-messaging模块带有一些来自诸如Message,MessageChannel,MessageHandler等Spring Integration对象的关键抽象,它们被用于基于消息传递应用的服务基础。
数据访问/集成层是由JDBC,ORM,OXM,JMS和事务模块组成。
spring-jdbc模块提供了一个JDBC抽象层,它剔除了繁琐的JDBC编码和数据库供应商指定的错误代码的解析。
对于实现指定接口的类和所有的POJO对象,spring-tx模块提供的编程和声明式事务的支持。
spring-orm模块提供了通用的对象-关系映射API的集成层,包括对JPA,JDO和hibernate集成。使用spring-orm模块可以使用跟Spring提供的其他功能合并到一起的所有的O/R映射框架。
spring-oxm提供了一个支持Object/XML映射实现带的抽象层,如JAXB,Castor,XMLBeans,JiBX和XStream等。
spring-jms模块(Java消息服务)包含了制造和使用消息的功能,从 Spring框架4.1开始,集成spring-messaging模块。
Web层由spring-web,spring-webmvc,spring-websocket和spring-webmvc-portlet模块组成。
spring-web模块提供了基本的面向web的基础功能。
spring-webmvc模块(也被叫做Web-Servlet模块)包含了Spring的MVC框架和用于web应用程序的REST web服务的实现。
spring-webmvc-portlet模块(也被叫做Web-Portlet模块)提供用于Portlet环境和映射spring-webmvc模块功能的MVC实现。
spring-test模块支持使用带有JUnit或TestNG的Spring组件进行单元测试和集成测试。提供固定的Spring的ApplicationContests加载以及这些环境的缓存。还提供mock对象,使用隔离的方式来测试代码。
IOC/DI:实现类与类之间解耦。
IOC/DI不是一种技术,而是一种设计思想。
IOC(控制反转):将设计好的对象交给容器控制,而不是传统的在对象内部直接控制。
所有的类的创建与销毁都由Spring控制,也就是说控制对象生存周期的不再是引用它的对象,而是Spring。
对于某个具体的对象而言,以前是它控制其他的对象,现在是所有对象都被Spring控制。
DI(依赖注入):由容器动态的将某种依赖关系注入到组件中。
所有的类都会在Spring容器中登Spring自己是什么,自己需要什么,然后Spring会在系统运行到适当的时候,把你需要的东西主动注入给你,同时也把你注入给其他需要你的东西。
spring自动把需要的bean注入给你, 前提条件: 需要把你自己交给Spring管理。
AOP:实现方法与方法的解耦。
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存)。
AOP思想:采用代理思想,在不改变目标代码的前提下,实现功能增强。
AOP是对OOP(面向对象编程)的补充延续
OOP:考虑的是对象与对象之间的关系,层次: 对象层面。
AOP:考虑的是方法与方法之间的关系,层次:方法层面。
IOC工厂制造对象,AOP代码增强对象,在工厂制造对象过程中,使用代理进行对象的增强。
将日志记录,性能统计,安全控制,事务处理等代码从业务逻辑代码中分离出来,将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。