首页 > 代码库 > 基础知识(09) -- Spring 概述
基础知识(09) -- Spring 概述
Spring概述
-------------------------------------------------------------------------
主要内容:
1、Spring是什么
2、Spring能帮我们做什么
3、为什么需要Spring及Spring的优点
4、Spring架构图
5、几个概念介绍
-------------------------------------------------------------------------
参考内容:
1. 开涛的Spring博客
2. 私塾在线Spring视频
3.《Spring 3.0就这么简单》一书
-------------------------------------------------------------------------
思维导图:
-------------------------------------------------------------------------
一、Spring是什么
Spring是一个开源的轻量级Java SE/Java EE开发应用框架,其目的是用于简化企业级应用程序开发。Spring以反转控制(Inverse of Control,IoC)和面向切面编程(Aspect Oriented Programming,AOP)为内核,提供了展现层Spring MVC、持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,此外,Spring以海纳百川的胸怀整合了开源世界里众多著名的第三方框架和类库。
二、Spring能帮我们做什么
Spring除了不能帮我们写业务逻辑,其余的几乎什么都能帮助我们简化开发:
(1)方便解耦,简化开发
通过Spring的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合,Spring能帮我们管理对象之间的依赖关系。在传统程序开发中,创建对象及组装对象间的依赖关系由我们在程序内部自己进行控制,这样会加大各个对象间耦合,如果我们要修改对象间的依赖关系就必须修改源代码、重新编译、部署;而如果采用Spring的话,则由Spring来帮助我们创建及组装对象间的依赖关系(根据配置文件或注解)
(******
我的理解:此功能是Spring中最重要、最核心的功能
1.对象的创建由IoC/DI来控制
2.对象间的依赖关系由 IoC/DI来控制
3.通过配置文件或者注解就能实现上面第1、2两点的功能,很方便
********)
(2)AOP编程的支持
通过Spring提供的AOP功能,我们可以很方便地进行面向切面编程,许多不容易用传统面向对象编程(OOP)实现的功能都可以通过AOP轻松应对。在传统程序开发中,当我们要进行一些日志记录、权限控制、性能统计时,我们可能在需要的对象或方法中进行硬编码的方式,而这部分的代码会大量的重复并且渗透到各个方法中去。如果采用Spring的话,就可以把日志记录、权限控制、性能统计等功能从核心业务逻辑中分离出来,通过Spring支持的面向切面编程,在需要这些功能的地方动态添加这些功能,无需渗透到各个需要的方法或对象中,Spring只是需要通过配置文件或者注解就能实现AOP的功能。
(******
我的理解:用了AOP后程序结构的变化:
1.通用功能模块的代码(日志记录、权限控制、性能统计)可以重复利用,而且不用通过硬编码的方式
2.核心的业务逻辑代码更加清晰,因为没有了日志记录、权限控制、性能统计 这些功能的硬编码代码
3.通过配置文件xml或者注解就可以把 核心业务代码和通用模块功能结合起来,很方便
********)
(3)管理数据库事务
在传统程序开发中,我们如何来完成数据库事务管理呢? 需要一系列"获取连接、执行SQL、提交或回滚事务、关闭连接",而且还要保证在最后一定要关闭连接,这是多么可怕的事情,而且很无聊;如果采用Spring来帮助我们管理事务的话,我们只需要获取连接、执行SQL,其它的都交给Spring来管理了。
(******
我的理解:Spring的事务管理是建立在AOP的基础之上的,通过配置文件或者注解就可以搞定,很方便
********)
(4)Spring能很好的与第三方数据访问框架集成
Spring还提供了与第三方数据访问框架(如Hibenate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。
(5)Spring能很好的与第三方Web框架集成
Spring提供了与第三方Web框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建
(6)Spring能很好的与Java EE整合
Spring能方便的与Java EE(如Java Mail、任务调度)正好,与更多技术整合(比如缓存框架)
三、为什么需要Spring及Spring的优点
(1)Spring是一个非常轻量级的容器
Spring以集中的、自动化的方式进行应用程序对象创建和装配,负责对象创建和装配,管理对象生命周期,能组合成复杂的应用程序。Spring容器是非侵入式的(不需要依赖任何Spring特定类),而且完全采用POJOs进行开发,使应用程序更容易测试、更容器管理,并且不需要依赖任何服务器,可以部署在任意环境(Java SE或Java EE)
(2)Spring提供AOP编程支持
AOP是Aspect Oriented Programming的缩写,意思是面向切面编程,提供从另一个角度来考虑程序结构以完善面向对象编程(相对于OOP),即可以通过在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中;比如安全控制、日志记录等通用功能,我们可以把这些功能提取出来,然后在程序执行的合适地方织入这些代码并执行它们,从而完成需要的功能并复用了这些功能。
(3)简单的数据库事务管理
在使用数据库的应用程序当中,自己管理数据库事务是一项很让人头痛的事,而且很容器出现错误,Spring支持可插入的事务管理,而且无需JEE环境支持,通过Spring管理事务可以把我们从事务管理中解放出来,更加专注于核心业务的开发
(4)JDBC抽象及ORM框架支持
Spring使JDBC更加容易使用;提供DAO支持,非常方便集成第三方ORM框架,比如Hibernate等,并且完成支持Spring事务和使用Spring提供的一致的异常体系。
(5)灵活的Web层支持
Spring本身提供一套非常强大的MVC框架,而且可以非常容易的与第三方MVC框架集成,比如Struts等。
(6)简化各种技术集成
Spring提供对Java Mail、任务调度、JMX、JMS、JNDI、EJB、动态语言、远程访问、Web Service等的集成.
四、Spring架构图
(1)核心容器:包括Core、Beans、Context、EL模块
Core模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。
Beans模块: 提供了框架的基础部分,包括反转控制和依赖注入。Spring核心模块实现了IoC的功能,它将类和类之间的依赖关系从代码中脱离出来,用配置的方式进行依赖关系描述,由IoC容器负责依赖类之间的创建、拼接、管理、获取等工作。其中BeanFactory接口是Spring框架的核心接口,本质是"工厂模式"的实现,而且无需编程实现‘单例设计模式‘,单例完全由容器控制,而且提倡面向接口编程,而且非面向实现编程;所有应用程序对象及对象间关系由框架管理,从而真正把你从程序逻辑中把维护对象之间的依赖关系提取出来,所有这些依赖关系都由BeanFactory来维护。
Context模块: 以Core和Beans为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化、Java EE支持、容器生命周期、事件传播等,核心接口是ApplicationContext.
EL模块: 提供强大的表达式语言支持,支持访问和修改属性值、方法调用、支持访问及修改数组、容器和索引器、命名变量、支持算数和逻辑运算、支持从Spring容器获取Bean、支持列表投影、选择、一般的列表聚合等。
(2)AOP、Aspects模块:
AOP模块: Srping AOP模块提供了符合AOP Alliance规范的面向方面的编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分类的技术,并且能动态的把这些功能添加到需要的代码中,这样核心业务代码和通用模块代码各专其职,降低核心业务逻辑和通用功能的耦合。
Aspects模块: 提供了对AspectJ的集成
(3)数据访问/集成模块:
事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事务管理。
JDBC模块: 提供了一个JDBC的样例模板,使用这些模板能消除传统冗长的JDBC编码,还有必须的事务控制,而且能享受到Spring事务管理的好处
ORM模块: 提供与流行的"对象-关系"映射框架的无缝集成,包括:Hibernate、JPA、Mybatis等,而且可以使用Spring事务管理,无需额外控制事务。
OXM模块: 提供了一个对Object/XML映射的实现,将Java对象映射成XML数据,或者将XML数据映射成Java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans、XStream
JMS模块: 用于JMS(Java Messaging Service),提供一套"消息生产者、消息消费者"模板用于更加简单的使用JMS,JMS可用于在两个应用程序之间,或者分布式系统中发送消息,进行异步通信。
(4)Web/Remoting模块: 包括:Web、Web-Servlet、Web-Struts、Web-porlet
Web模块: 提供了基础的Web功能。例如多文件上传、集成IoC容器、远程过程访问以及Web Service支持
Web-Servlet模块:提供了一个Spring MVC Web框架实现,Spring MVC框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等功能。
Web-Struts模块: 提供了与Struts无缝集成,Struts1.x和Struts2.x都支持。
(5)Test模块:
Spring支持Junit和TestNG测试框架,而且还额外提供了一些基于Spring的测试功能,比如在测试Web框架时,模拟Http请求的功能。
五、几个概念介绍
(1)应用程序
是能完成我们所需要功能的成品,比如:购物网站、OA系统
(2)框架
是能完成一定功能的半成品,比如我们是要框架进行购物网站开发;框架做一部分的功能,我们自己做一部分的功能,这样应用程序就创建出来了。而且框架规定了你在开发应用程序时的整体架构,提供了一些基础的功能,还规定了类和对象的如何创建、如何协作等,从而简化我们开发,让我们专注于业务逻辑开发。
(3)非侵入式设计
从框架角度可以这样理解,无需继承框架提供的类,这种设计就可以看做是非侵入式设计;如果继承了这些框架类,就是侵入式; 采用侵入式:如果以后想要更换框架的话,那么之前写的代码几乎无法重用;如果非侵入式设计则之前写过的代码仍然可以继续使用。
(4)轻量级及重量级
轻量级是相对于重量级而言的,轻量级一般就是非侵入式的、所依赖的东西非常少、资源占用非常少、部署简单等等,而重量级正好相反。
(5)POJO
POJO(Plain Old Java Objects)简单的Java对象,它可以包含业务逻辑或持久化逻辑,但不但当任何特殊角色且不继承或不实现任何其它Java框架的类或接口。
基础知识(09) -- Spring 概述