0x01 Spring描述

为了解决企业应用开发的复杂性而创建的轻量级开源框架
Spring又称为容器, 使用Spring开发可以将Bean对象, Dao组件对象, Service组件对象等交给Spring容器来管理
这样使得很多复杂的代码在Spring中开发却变得非常的优雅和简洁, 有效的降低代码的耦合度, 极大的方便项目的后期维护、升级和扩展

0x02 Spring核心技术

IOC(控制反转)和AOP(面向切面编程)

0x03 Spring作用

实现解耦合, 解决Java对象和模块之间的耦合

0x04 Spring的特点

0x04.1 IOC(控制反转)

  1. Inversion of Control简称IOC
  2. 降低了组件之间的耦合性, 实现了软件各个层之间的解耦
  3. 通过Spring提供的IOC容器,将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的程序耦合
  4. 有了Spring以后,就可以不用自己去手动实例化对象等操作和编写属性文件解析等这些很底层的需求代码
  5. 可以更专注于上层的应用

0x04.2 AOP(面向切面编程)

  1. Aspect Oriented Programming简称AOP
  2. 通过Spring提供的AOP功能,可以很方便的进行面向切面编程
  3. 许多不容易实现的功能,用传统方式OOP的方式实现比较困难,但是使用了AOP之后,可以轻松应付

0x04.3 声明式事务的支持

  1. Spring中,我们可以从编程式事务代码中解脱出来
  2. 通过声明式的方式,灵活地进行事务的管理,提高开发效率和质量
  3. 编程式事务: 在业务代码中添加事务控制代码,这样的事务控制机制就叫做编程式事务
  4. 声明式事务: 通过xml或者注解配置的方式达到事务控制的目的,叫做声明式事务

0x04.4 方便程序的测试

  1. 可以用非容器依赖的编程方式进行几乎所有的测试工作
  2. Spring里, 测试不再是麻烦的操作,而是随手可做的事情
  3. 例如: 通过Spring使用junit,可以通过注解的方式优雅的测试Spring程序

0x04.5 方便集成各种优秀框架

  1. Spring不排斥各种优秀的开源框架
  2. 相反使用Spring可以降低各种框架的使用难度
  3. Spring提供了对各种优秀框架的支持
  4. 例如: StrutsHibernateHessianQuartz JPA Mybatis IBatis

0x04.6 Spring的高度开发性

  1. Spring并不强制应用完全依赖于Spring,开发者可以自由选择Spring的部分或者全部

0x04.7 降低 Java EE API 的使用难度

  1. Spring对很多难用的Java EE API(如:JDBCJavaMail、远程调用等)
  2. 提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大大降低

0x04.8 非侵入式

  1. 基于Spring开发的应用中的对象可以不依赖于SpringAPI

0x04.9 依赖注入

  1. Dependency Injection简称DI
  2. 是指依赖的对象不需要手动调用setXX方法去设置,而是通过配置赋值

0x04.10 容器

  1. Spring是一个容器,因为它包含并且管理应用对象的生命周期

0x04.10.1 组件化

  1. Spring实现了使用简单的组件配置组合成一个复杂的应用
  2. Spring中可以使用XMLJava注解组合这些对象

0x04.10.2 一站式

  1. IOCAOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库
  2. (实际上Spring自身也提供了表述层的SpringMVC和持久层的Spring JDBC)

0x05 Spring包描述

Core核心模块

  1. Core核心模块,负责管理组件的Bean对象
  1. 包名: spring-beans*.jar
  2. 这个jar文件是所有应用都要用到的
  3. 它包含访问配置文件、创建和管理Bean以及进行(IOC/DI)操作相关的所有类
  4. 如果应用只需基本的IOC/DI支持,引入spring-core-*.jarspring-beans-*.jar文件就可以了
  1. 包名: spring-core*.jar
  2. 这个jar文件包含Spring框架基本的核心工具类
  3. Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心
  4. 当然你也可以在自己的应用系统中使用这些工具类
  1. 包名: spring-context*.jar
  2. 这个jar文件为Spring核心提供了大量扩展
  3. 可以找到使用Spring ApplicationContext特性时所需的全部类
  4. JDNI所需的全部类,instrumentation组件以及校验Validation方面的相关类
  1. 包名: spring-context-support*.jar
  2. 支持集成第三方库
  3. 比如缓存(EhCache, Guava, JCache)
  4. 邮件(JavaMail),
  5. 作业调度(CommonJ, Quartz)
  6. 模板引擎(FreeMarker, JasperReports, Velocity)
  7. 等..
  1. 包名: spring-expression*.jar
  2. 提供强大的表达式语言

面向切面编程

  1. 包名: spring-aop*.jar
  2. 这个jar文件包含在应用中使用SpringAOP特性时所需的类和源码级元数据支持
  3. 使用基于AOPSpring特性
  4. 如声明型事务管理(Declarative Transaction Management)
  5. 也要在应用里包含这个jar
  1. 包名: spring-aspects*.jar
  2. 提供对AspectJ的支持, 以便可以方便的将面向方面的功能集成进IDE中, 比如Eclipse AJDT

数据操作

  1. 包名: spring-dao*.jar
  2. 这个jar文件包含Spring DAOSpring Transaction进行数据访问的所有类
  3. 为了使用声明型事务支持, 还需在自己的应用里包含spring-aop.jar
  1. 包名: spring-jdbc*.jar
  2. 这个jar 文件包含对Spring JDBC 数据访问进行封装的所有类
  1. 包名: spring-orm*.jar
  2. 提供流行ormAPI(JPAJDOHibernate...)
  1. 包名: spring-oxm*.jar
  2. 支持多视图,比如pdfExceljsonxml
  1. 包名: spring-tx*.jar
  2. 支持事务

Web模块

  1. 包名: spring-web*.jar
  2. 这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类
  3. 包括自动载入
  4. Web Application Context特性的类
  5. Struts JSF 集成类、文件上传的支持类
  6. Filter类和大量工具辅助类
  1. 包名: spring-webmvc*.jar
  2. 这个jar文件包含Spring MVC框架相关的所有类
  3. 包括框架的Servlets,Web MVC框架,控制器和视图支持
  4. 当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类

测试相关

  1. 包名: spring-test*.jar
  2. 进行单元测试与集成测试