1、什么是spring
spring是一个开源的轻量级JavaSE、JavaEE开发应用框架,其目的是简化企业级应用开发。
2、spring给我们带来什么
- 方便解耦,简化开发。
通过sping提供的IOC容器,用户可以将对象之间的依赖关系交由spring控制,避免硬编码所造成的过度程序耦合。
- AOP编程的支持。
通过spring提供的AOP功能,方便进行面向切面编程,很多不容易用传统OOP实现的功能可以通过AOP轻松应对。
- 声明式事务支持。
在spring中,用户可以从单调烦闷的事务管理代码中解脱出来,通过声明的方式灵活地进行事务管理,提高开发效率和质量。
- 单元测试方便。
可以用非容器依赖的的编程方式进行几乎所有的测试工作。
- 方便集成各种优秀开源框架。
spring不排斥各种优秀的开源框架,相反,spring可以降低各种框架的使用难度,提供了对各种优秀框架(如Struts,hibernate,hessian,quartz等)的直接支持。
- 降低JavaEE API开发的使用难度。
spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄层封装,通过spring的简易封装,这些Java EE API使用难度大大降低。
- spring源码是经典的学习范例。
spring源码设计精妙,结构清晰,是Java技术的最佳实践范例。
3、为什么需要spring
相关概念:
应用程序:是能完成我们需要的功能的成品,比如购物网站、OA系统。
框架:是完成一定功能的半成品,比如我们可以使用框架进行购物网站的开发;框架做一部分功能我们自己做一部分功能,这样程序就创建出来了。而且框架规定了你在开发过程中
的整体架构。
非入侵式设计:从框架角度可以这样理解,无需集成框架提供的类,这种设计就可以看做是非入侵式设计,如果继承了这些框架类,就是侵入设计。
轻量级重量级:轻量级是相对于重量级而言的,轻量级的一般就是非入侵的、所依赖的东西非常少、占用资源少、部署简单,而重量级恰恰相反。
POJO:简单的Java对象,它可包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不继承或不实现任何其他Java框架的类或接口。
容器:在日常生活中容器就是一种盛放东西的器具,从程序设计角度看就是装对象的对象,因为存在放入、拿出操作,所以容器还要管理对象的生命周期。
控制反转:控制反转还有一个名字叫做依赖注入,就是由容器控制程序之间的关系,而非传统实现中由程序代码直接控制。
Bean:一般指容器管理的对象,在spring中指的是spring IOC容器管理的对象。
理由:
非常轻量级的容器
AOP
简单的数据库事务管理
JDBC抽象及ORM框架支持
灵活的Web层支持
简化各种技术集成
4、sping的体系结构
spirng核心框架由4000多个类组成,整个框架按照其所属功能可以划分为如下图所示主要模块:
核心容器:包括Core、Beans、Context、EL
- Core 模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用的工具类。
- Beans模块:提供了框架的基础部分,包括反转控制和依赖注入。其中BeanFactory是核心容器,本质是“工厂设计模式”的实现,而且无需编程实现“单例设计模式” ,单例完全由容
器控制,而且提倡面向接口编程,而非面向对象编程;所有应用程序对象及对象之间的关系由框架管理。
- Context模块:以Core和Beans为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化、JavaEE支持、容器生命周期、事件传播等;核心接口是ApplicationContext
- EL模块:提供强大的表达式语言支持,支持访问和修改属性,方法调用,支持访问及修改数组、容器和索引器,支持从spring容器获取Bean。
AOP、Aspects模块:
- AOP模块:spring AOP提供了符合AOP Alliance规范的面向切面的编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的将这些功能添
加到需要的代码中。
- Aspects模块:提供了对AspectJ的集成,AspectJ提供了比spring asp更强大的功能。
数据访问集成模块:
- 事务模块:该模块用于spring的事务管理,只要是spring管理对象都能得到spring管理事务的好处,无需再代码中进行事务控制了,而且支持编程和声明式事务管理。
- JDBC模块:提供了一个JDBC的样例模板,使用这些模板能消除冗长的JDBC编码还有必须的事务控制,且能享受到spring控制事务的好处。
- ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括hibernate、mybatis等。
- OMX模块:提供了一个对Object/xml映射实现。
- JMS模块:用于JMS,提供一套“消息生产者,消息消费者”模板用于更加简单的使用JMS,JMS用于两个应用程序之间或分布式系统中发送消息,进行异步通信。
Web/Remoting模块:
- web模块:提供了基础的web功能。例如多文件上传,集成IOC容器、远程过程访问(RMI、Hessian、Burlap)、以及WebService支持,并提供一个RestTemplate类来提供
方便的RESTful访问。
- web-servlet:提供了一个SpringMVC web框架实现。SpringMVC框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的JSP标签。
- web-struts模块:提供了与Struts的无缝集成。
Test模块:
spring支持Junit和TestNG测试框架,而且还提供了一些基于spring的测试功能,比如在测试web框架时,模拟http请求的功能。
5、典型应用场景:
spring可以应用到许多场景,最简单的JavaSE程序到企业级应用程序都能使用spring来构建。
- 典型的web应用场景:
典型的三层应用架构:数据模型层实现域对象;数据访问层实现数据访问;逻辑层实现业务逻辑;web层提供页面展示;所有这些层组件都由spring进行管理,享受到spring事务管
理、AOP等好处,而且唯一的入口就是DispatchServlet,它通过把请求映射为响应的web层组件来实现响应请求功能。
- 远程访问场景:
spring能非常方便的提供暴露RMI服务,远程访问服务如Hessian、Burlap等,实现非常简单只需通过在spring中配置响应的地址及需暴露的服务即可轻松实现。
- EJB应用场景:
spring也可以与EJB轻松集成。
6、对Java版本的要求
spring4.x基于Java6.0,全面支持Java8.0。运行spring4.x必须使用java6.0以上版本,推荐使用Java8.0及以上版本。
7、spring4.x新特性
- 全面支持Java8.0
- 核心容器增强
- 支持Groovy定义Bean
- Web增强
- 支持WebSocket
- 测试增强