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 概述的更多相关文章

  1. Spring MVC基础知识整理➣Spring+SpringMVC+Hibernate整合操作数据库

    概述 Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据.Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD.Hibern ...

  2. qt基础知识之类库概述

    qt是用标准c++编写的跨平台开发类库,它对标准c++进行拓展,引入元对象系统.信号&槽.属性等特征 全局定义 容器类及对应迭代器 qt的模块化体系,分为 基本模块和拓展模块,一个模块通常就是 ...

  3. ASP.NET Core 2.2 基础知识(十三) WebAPI 概述

    我们先创建一个 WebAPI 项目,看看官方给的模板到底有哪些东西 官方给出的模板: [Route("api/[controller]")] [ApiController] pub ...

  4. Spring笔记01(基础知识)

    1.基础知识 01.Spring:轻量级Java EE开源框架,它是由Rod Johnson为了解决企业应用程序开发的复杂性而创建. 02.目标:实现一个全方位的整合框架,实现“一站式”的企业应用开发 ...

  5. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  6. 4-1 Spring框架基础知识

    Spring框架基础知识 1.Spring 框架作用 主要解决了创建对象和管理对象的问题. 自动装配机制 2.Spring 框架 (Spring容器,JavaBean容器,Bean容器,Spring容 ...

  7. CSS样式基础知识

    CSS样式基础知识 CSS样式概述 CSS是Cascading Style Sheet 的缩写.译作“层叠样式表单”.是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 引用位 ...

  8. Java复习(一)——Java语言概述、开发环境、基础知识

    设计模式:在各种应用系统中被大量应用,是设计的“常用套路” 作为Java WEB开发人员,需要掌握HTML/CSS/JS和数据库相关知识 常用的应用程序框架:Spring MVC,Spring Boo ...

  9. 学习Spring必学的Java基础知识

    [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...

随机推荐

  1. [Leetcode] Combination Sum 系列

    Combination Sum 系列题解 题目来源:https://leetcode.com/problems/combination-sum/description/ Description Giv ...

  2. static作用(修饰函数、局部变量、全局变量)转自http://www.cnblogs.com/stoneJin/archive/2011/09/21/2183313.html

    static作用(修饰函数.局部变量.全局变量) 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件 ...

  3. redis常见数据操作

    redis中有5种常见的数据类型,针对这5种数据类型有着相应的数据操作. 1.String(键值对为String - String) set k1 v1 get k1 getset k1 v1 - h ...

  4. PCA算法和SVD

    如果矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值.这里可以将特征值为负,特征向量旋转180度,也可看成方向不变,伸缩 ...

  5. 使用情况查询top命令

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. top - 01:06:48 up 1:22, 1 ...

  6. 产生唯一的临时文件mkstemp()

    INUX下建立临时的方法(函数)有很多, mktemp, tmpfile等等. 今天只推荐最安全最好用的一种: mkstemp. mkstemp (建立唯一临时文件)头文件: #include < ...

  7. POJ 2431 Expedition (贪心 + 优先队列)

    题目链接:http://poj.org/problem?id=2431 题意:一辆卡车要行驶L单位距离,卡车上有P单位的汽油.一共有N个加油站,分别给出加油站距终点距离,及加油站可以加的油量.问卡车能 ...

  8. gtk+学习笔记(三)

    gtk感觉函数好多,需要记好多函数,还是多练习,多总结,今天写了一个登陆窗口,很简单,主要是为了加深对这些东西的记忆,直接贴代码 #include<gtk/gtk.h> static Gt ...

  9. 为什么可以这么快! awk 与python的应用

    这几天刚处理一个排序问题 源文件: 可以看到有11G大小,需要根据最后一列的热度来做一下排序.如果让你来做这样的排序,在linux环境下,你会如何处理呢? xch27@lanzhou:/asrdata ...

  10. ref:Spring Integration Zip 不安全解压(CVE-2018-1261)漏洞分析

    ref:https://mp.weixin.qq.com/s/SJPXdZWNKypvWmL-roIE0Q 0x00 漏洞概览 漏洞名称:Spring Integration Zip不安全解压 漏洞编 ...