0x01 Spring描述
为了解决企业应用开发的复杂性而创建的轻量级开源框架
Spring又称为容器, 使用Spring开发可以将Bean对象, Dao组件对象, Service组件对象等交给Spring容器来管理
这样使得很多复杂的代码在Spring中开发却变得非常的优雅和简洁, 有效的降低代码的耦合度, 极大的方便项目的后期维护、升级和扩展
0x02 Spring核心技术
0x03 Spring作用
0x04 Spring的特点
0x04.1 IOC(控制反转)
Inversion of Control简称IOC
降低了组件之间的耦合性, 实现了软件各个层之间的解耦
通过Spring提供的IOC容器,将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的程序耦合
有了Spring以后,就可以不用自己去手动实例化对象等操作和编写属性文件解析等这些很底层的需求代码
可以更专注于上层的应用
0x04.2 AOP(面向切面编程)
Aspect Oriented Programming简称AOP
通过Spring提供的AOP功能,可以很方便的进行面向切面编程
许多不容易实现的功能,用传统方式OOP的方式实现比较困难,但是使用了AOP之后,可以轻松应付
0x04.3 声明式事务的支持
在Spring中,我们可以从编程式事务代码中解脱出来
通过声明式的方式,灵活地进行事务的管理,提高开发效率和质量
编程式事务: 在业务代码中添加事务控制代码,这样的事务控制机制就叫做编程式事务
声明式事务: 通过xml或者注解配置的方式达到事务控制的目的,叫做声明式事务
0x04.4 方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作
在Spring里, 测试不再是麻烦的操作,而是随手可做的事情
例如: 通过Spring使用junit,可以通过注解的方式优雅的测试Spring程序
0x04.5 方便集成各种优秀框架
Spring不排斥各种优秀的开源框架
相反使用Spring可以降低各种框架的使用难度
Spring提供了对各种优秀框架的支持
例如: Struts、Hibernate、Hessian、Quartz JPA Mybatis IBatis
0x04.6 Spring的高度开发性
Spring并不强制应用完全依赖于Spring,开发者可以自由选择Spring的部分或者全部
0x04.7 降低 Java EE API 的使用难度
Spring对很多难用的Java EE API(如:JDBC、JavaMail、远程调用等)
提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大大降低
0x04.8 非侵入式
基于Spring开发的应用中的对象可以不依赖于Spring的API
0x04.9 依赖注入
Dependency Injection简称DI
是指依赖的对象不需要手动调用setXX方法去设置,而是通过配置赋值
0x04.10 容器
Spring是一个容器,因为它包含并且管理应用对象的生命周期
0x04.10.1 组件化
Spring实现了使用简单的组件配置组合成一个复杂的应用
在Spring中可以使用XML和Java注解组合这些对象
0x04.10.2 一站式
在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库
(实际上Spring自身也提供了表述层的SpringMVC和持久层的Spring JDBC)
0x05 Spring包描述
Core核心模块
Core核心模块,负责管理组件的Bean对象
包名: spring-beans*.jar
这个jar文件是所有应用都要用到的
它包含访问配置文件、创建和管理Bean以及进行(IOC/DI)操作相关的所有类
如果应用只需基本的IOC/DI支持,引入spring-core-*.jar及spring-beans-*.jar文件就可以了
包名: spring-core*.jar
这个jar文件包含Spring框架基本的核心工具类
Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心
当然你也可以在自己的应用系统中使用这些工具类
包名: spring-context*.jar
这个jar文件为Spring核心提供了大量扩展
可以找到使用Spring ApplicationContext特性时所需的全部类
JDNI所需的全部类,instrumentation组件以及校验Validation方面的相关类
包名: spring-context-support*.jar
支持集成第三方库
比如缓存(EhCache, Guava, JCache)
邮件(JavaMail),
作业调度(CommonJ, Quartz)
模板引擎(FreeMarker, JasperReports, Velocity)
等..
包名: spring-expression*.jar
提供强大的表达式语言
面向切面编程
包名: spring-aop*.jar
这个jar文件包含在应用中使用Spring的AOP特性时所需的类和源码级元数据支持
使用基于AOP的Spring特性
如声明型事务管理(Declarative Transaction Management)
也要在应用里包含这个jar包
包名: spring-aspects*.jar
提供对AspectJ的支持, 以便可以方便的将面向方面的功能集成进IDE中, 比如Eclipse AJDT
数据操作
包名: spring-dao*.jar
这个jar文件包含Spring DAO、Spring Transaction进行数据访问的所有类
为了使用声明型事务支持, 还需在自己的应用里包含spring-aop.jar
包名: spring-jdbc*.jar
这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类
包名: spring-orm*.jar
提供流行orm的API(JPA、JDO、Hibernate...)
包名: spring-oxm*.jar
支持多视图,比如pdf、Excel、json、xml
包名: spring-tx*.jar
支持事务
Web模块
包名: spring-web*.jar
这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类
包括自动载入
Web Application Context特性的类
Struts 与JSF 集成类、文件上传的支持类
Filter类和大量工具辅助类
包名: spring-webmvc*.jar
这个jar文件包含Spring MVC框架相关的所有类
包括框架的Servlets,Web MVC框架,控制器和视图支持
当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类
测试相关
包名: spring-test*.jar
进行单元测试与集成测试