一、Spring是什么?

  Spring 是一种轻量级的、非侵入式的 Java/JavaEE 应用框架。Spring 使用的是基本的 JavaBean 来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

  Spring 的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的 JavaSE/EE full-stack(一站式) 轻量级开源框架。

二、Spring能干什么?

  笼统的说,Spring 能作为一个超级的"粘合"平台,把很多的技术有效整合到一起 形成一个整体,以更好地解决问题,并使系统结构更优良、性能更出众。(体现体系结构设计的:组件式、装配式、插拔式、复用性、无侵入性等)。

  Spring 能干的事情很多,具体点说,最基本的有以下几条:

  • Ioc/DI
  • AOP
  • 对JDBC和ORM的支持
  • 对事物的支持
  • 各种技术的整合
  • Web应用框架(Spring MVC)

三、Spring有什么?

从上图可以看出Spring总共包含了大约20个模块,这些模块又被组成成为: 核心容器模块、数据访问/集成部分、Web部分、AOP部分和测试支持 几个部分。

核心容器部分(Core Container)

  • Core和Beans模块: 提供了Spring最基础的功能,提供IoC和依赖注入特性;
  • Context模块: 基于Core和Beans来构建,它提供了用一种框架风格的方式来访问对象,有些像JNDI注册表。Context封装包继承了beans包的功能,还增加了国际化(I18N)、事件传播、资源装载、以及透明创建上下文;
  • Expression Language: 表达式语言模块,提供了在运行期间查询和操作对象图的能力;

数据访问/集成部分(Data Access/Integration)

  • JDBC模块: 提供对JDBC的抽象,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码;
  • ORM模块: 提供了常用的"对象/关系" 映射APIs的集成层。其中包括:JAP、JDO、Hibernate、Ibatis;
  • OXM模块: 提供一个支持Object和XML进行映射的抽象层,其中包括JAXB、Castor、XMLBeans、JiBX、XStream;
  • JMS模块: 提供一套"消息生产者、消费者"模板用于更加简单的使用JMS;
  • Transaction模块: 支持程序通过简单声明性事务管理,只要是Spring管理对象都能得到Spring事务管理的好处;

Web部分

  • Web模块:提供了基础的Web功能;
  • Web-Servlet模块:提供了Web应用的Model-View-Controller(MVC)实现;
  • Web-Struts模块:提供了对Struts集成的支持;
  • Web-Portlet模块:提供了在Portlet环境下的MVC实现;

AOP部分

  • AOP模块: 提供了符合AOP联盟规范的面向方面的编程实现,可以定于如:方法拦截器和切入点;
  • Aspects模块:提供了对AspectJ的集成;
  • Instrumenttation模块:提供了一些类级的工具支持和ClassLoader级的实现;

Test部分

  • Test模块: 提供对使用JUnit和TestNG来测试Spring组件的支持,它提供一致的ApplicationContexts并缓存这些上下文,它还能提供mock对象,使得你可以独立的测试代码;

四、Spring的优点

  • 方便解耦,简化开发 (高内聚低耦合)

    • Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理;
    • spring工厂是用于生成bean
  • AOP编程的支持
    • Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能;
  • 声明式事务的支持
    • 只需要通过配置就可以完成对事务的管理,而无需手动编程;
  • 方便程序的测试
    • Spring对Junit4支持,可以通过注解方便的测试Spring程序;
  • 方便集成各种优秀框架
    • Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持;
  • 降低JavaEE API的使用难度
    • Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低;
  • Java 源码是经典学习范例
    • Spring的源码设计精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果;

Spring学习之==>入门知识的更多相关文章

  1. Spring学习——从入门到精通

    本文章是博主原创,转载需注明出处. 第一篇先简单入个门--通过Spring创建对象 开发环境为Myeclipse2013,JDK版本为1.6,不要嫌它老,新知识都是在旧知识的基础上建立起来的,所谓基础 ...

  2. Spring学习笔记(入门)

    1.基本看了一下,spring就是利用这个框架帮助我们实例化对象的工具.首先我们需要引入jar包,pom.xml如下: <project xmlns="http://maven.apa ...

  3. Spring学习10-SpringMVC入门

       二.SpringMVC请求处理流程    其中Front controller :前端控制器 Controller:后端控制器   三.Spring核心组件及请求处理流程

  4. Spring学习-- AOP入门动态代理

    AOP 的拦截功能是由 java 中的动态代理来实现的.说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常 ...

  5. R语言学习笔记 (入门知识)

    R免费使用:统计工具:# 注释,行注释块注释:anything="这是注释的内容"常用R语言编辑器:Rsutdio,Tinn-R,Eclipse+StatET:中文会有乱码帮助:? ...

  6. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  7. 毕业设计预习:VHDL入门知识学习(一) VHDL程序基本结构

    VHDL入门知识学习(一) VHDL程序基本结构 简介 VHDL程序基本结构 简介 概念: HDL-Hardware Description Language-硬件描述语言-描述硬件电路的功能.信号连 ...

  8. Solr学习笔记(5)—— Spring Data Solr入门

    一.Spring Data Solr简介 前面已经介绍了通过solrJ来操作solr,那么我们如何将Solr的应用集成到Spring中?Spring Data Solr就是为了方便Solr的开发所研制 ...

  9. [Spring框架]Spring AOP基础入门总结一.

    前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect ...

随机推荐

  1. PAT Basic 1094 谷歌的招聘 (20 分)

    20 5 23654987725541023819 输出样例 1: 49877 输入样例 2: 10 3 2468024680 输出样例 2: 404 #include <iostream> ...

  2. 【SDOI2018】反回文串(【ARC064 F】Rotated Palindromes 加强版)

    题意 给你一个正整数 \(n\),求有多少字符集为 \(1\) 到 \(k\) 之间整数的字符串,使得该字符串可以由一个长度为 \(n\) 的回文串循环移位得到. ARC原题 \(100\%\) 的数 ...

  3. javaWeb中的session和cookie

    Cookie Cookie 是浏览器提供的一种技术,通过服务器的程序能将一些只须保存在客户端,或者 在客户端进行处理的数据,放在本地的计算机上,不需要通过网络传输,因而提高网页处理的效率,并且能够减少 ...

  4. Liux chmod 给文件夹赋权限

    777 最高权限 给文件夹及子文件夹赋权限 chmod -R 777 * 给单独文件赋权限 chmod -R 777 ./startup.sh

  5. Android studio测试软件——Monkey学习及运用

    Android studio测试软件——Monkey学习及运用 在第十五周的个人博客上,王老师安排我们根据最终的团队大作业所用的软件(Android studio)进行软件测试的介绍,而我选择的是基于 ...

  6. promethus监控gpu并编写自定义grafana可视化页面模板

    ###监控gpu url:https://github.com/NVIDIA/gpu-monitoring-tools/tree/master/exporters/prometheus-dcgm 实际 ...

  7. php+大视频文件上传+进度条

    该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开始. 如何分 ...

  8. 灰度图像--图像分割 Robert算子

    学习DIP第43天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不 ...

  9. 使用Hexo和Github搭建博客站

    本人电脑系统为window 10专业工作站版,64位 相关步骤: 1.安装Node.js和配置好Node.js环境,打开cmd命令行,成功界面如下 2.安装Git和配置好Git环境,安装成功的象征就是 ...

  10. JQuery属性操作之attr()和prop()的区别

    代码示例: <!doctype html> <html lang="en"> <head> <meta charset="UTF ...