http://www.cnblogs.com/wangzn/p/6138062.html

 大家好,相信Java高级工程师对spring框架都很了解吧!那么我以个人的观点总结一下spring,希望大家有所帮助。

一、内容纲要

  1、spring的起源和背景

  2、spring简介

  3、spring的核心模块

  4、springIOC和AOP

  5、为什么要使用spring

  6、spring的目的?意义?

  7、spring的优缺点

  8、spring带给我们什么

  9、spring能做什么

二、具体内容

  1、spring的起源和背景

  Rod Johson在2002年编著的《Expert one to one J2EE design and development》一书中,对Java EE正统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。以此书为指导思想,他编写了interface21框架,这是一个力图冲破Java EE传统开发的困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。

  Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而与它们无缝地整合。

  spring的设计目标:遵循一系列的接口标准,这样的好处是只需要简单的Java对象或者Javabean就能进行Java EE开发,这样开发的入门、测试、应用部署都得到了简化。

  2、spring简介

  Spring是一个开源的用于简化采用Java语言开发企业级程序的一个分层的框架。

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

  3、spring的核心模块

   Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

  1)Spring Core:核心容器,BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能

SpringContext:ApplicationContext,扩展核心容器,提供事件处理、国际化等功能。它提供了一些企业级服务的功能,提供了JNDI,EJB,RMI的支持。

  2) Spring AOP:提供切面支持

  3) Spring DAO:提供事务支持,JDBC,DAO支持

  4) Spring ORM:对流行的O/R Mapping封装或支持

  5) Spring Web:提供Web应用上下文,对Web开发提供功能上的支持,如请求,表单,异常等。

  6) Spring Web MVC:全功能MVC框架,作用等同于Struts。

    7)核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

  4、springIOC和AOP

      

    4、1、IoC的概念

    IoC,Inversion of Control,控制反转。

     对象的协作关系由对象自己负责。

    依赖注入:对象的协作关系有容器来建立。

    4、2、IoC的类型

    (1) 基于特定接口(侵入式方案)

    (2) 基于set方法

    (3) 基于构造器

    4、3、Spring容器

    Spring容器负责生成、组装、销毁组件,并负责事件处理、国际化等功能。

    (1) BeanFactory<interface>

    ① 核心容器,负责组件生成和装配

    ② 实现主要包括Xml BeanFactory

    (2) ApplicationContext

    (3) WebApplicationContext

    (4) ……

    4、4、IoC的使用

    Resource:interface,用来包装资源

    xmlBeanFactory:BeanFactory的一个实现,使用Resource对象来查找配置文件

    BeanFactory.gerBean(“BeanId”):取得以参数命名,或者Id等于参数值的一个Bean实例。

    BeanFactory(容器)在默认情况下,会采用单例方式返回对象。容器只到调用getBean方法时,才会实例化某个对象。

     (1) Spring可以采用XML或者.properties文件作配置

    (2) 配置文件(XML)

     根元素<beans>可以有多个<bean>子元素,每个<bean>代表一个需要装配的对象。

    1、setter注入

     (1) 注入简单属性(String和8中基本类型)

      <beans>

        <bean id=”BeanId” class=”classpath” autowire=” ” dependency-check=” ”>

         <property name=”parameterName”>

          <value>parameterValue</value>

         </property>

        </bean>

       </beans>

    对于基本类型,Spring容器会自动作类型转换,以便赋值。

  (2) 注入对象

    <bean>

      <ref local=”BeanId”>

    </bean>

     A、让Spring容器在当前配置文件中找到相应的Bean,并调用set方法,注入该Bean。

     B、将一个Bean的定义嵌套在另一个Bean中(可读性差),被嵌套的Bean不能采用getBean()返回

    C、采用<ref bean=” ”>搜索多个配置文件来注入

    (3) 注入集合类型

      ① Set

      Set中存放字符串,对象,集合,不允许重复

     ② List

       List中可以放入字符串,对象,List

     ③ Map

      Map 有<entry>子元素来存取key,value,key只能为String

     ④ Properties

     Properties有<props>子元素

 spring的AOP   

一、AOP(Aspect-oriented programming,面向切面编程):

什么是AOP?

定义:将程序中的交叉业务逻辑提取出来,称之为切面。将这些切面动态织入到目标对象,然后生成一个代理对象的过程。

二、AOP核心概念

1、Aspect(切面)

切面,是对交叉业务逻辑的统称。

2、Joinpoint(连接点)

连接点,指切面可以织入到目标对象的位置(方法,属性等)。

3、Advice(通知)

通知,指切面的具体实现。

4、Pointcut(切入点)

切入点,指通知应用到哪些类的哪些方法或属性之上的规则。

5、Introduction(引入)

引入,指动态地给一个对象增加方法或属性的一种特殊的通知。

6、Weaving(织入)

织入,指将通知插入到目标对象。

7、Target(目标对象)

目标对象,指需要织入切面的对象。

8、Proxy(代理对象)

代理对象,指切面织入目标对象之后形成的对象。

三、Spring AOP原理

采用动态代理模式。

Spring AOP采用动态代理的过程:

(1) 将切面使用动态代理的方式动态织入到目标对象(被代理类),形成一个代理对象;

(2) 目标对象如果没有实现代理接口,那么Spring会采用CGLib来生成代理对象,该代理对象是目标对象的子类;

(3) 目标对象如果是final类,并且也没实现代理接口,就不能运用AOP。

四、Spring的通知

1、Spring的通知类型

(1) MethodBeforeAdvice

类全名:org.springframework.aop.MethodBeforeAdvice

在方法调用之前,做处理。

不能够改变返回值

不能够改变目标方法的流程,也不能中断流程的处理过程(除非抛出异常)

(2) AfterReturningAdvice

类全名:org.springframework.aop.AfterReturningAdvice

在方法调用之后,做处理。

不能够改变返回值

不能够改变目标方法的流程,也不能中断流程的处理过程(除非抛出异常)

(3) MethodInterceptor

类全名:org.aopalliance.intercept.MethodInterceptor

在方法调用之前以及之后,做处理。

可以改变返回值,也可以改变流程。

(4) ThrowsAdvice

类全名:org.springframework.aop.ThrowsAdvice

在方法抛出异常后,做处理。

当该通知处理完异常后,会简单地将异常再次抛出给目标调用方法。

2、配置过程:

(1)配置目标对象

(2)配置通知

(3)利用ProxyFactoryBean将通知织入到目标对象,形成一个动态代理对象

(4)客户端使用动态代理来访问目标对象的方法。

在默认情况下,通知会应用到所有的方法之上。

Pointcut:

根据方法和类决定在什么地方织入通知

Advisor:

将Pointcut与Advice结合到一起。

  5、为什么要使用spring

    因为只要是OOP开发的应用,都是由对象与对象之间进行协作进行工作的,那么对象与对象之间的关系管理(依赖关系)如果需要自己用代码进行维护很麻烦。用了Spring就可以省去这麻烦的工作了

  

    Spring是独特的,因为若干个原因:

      ◆它定位的领域是许多其他流行的framework没有的。Spring关注提供一种方法管理你的业务对象。

      ◆ Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。因此从你的学习中,你可得到最大的价值。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。

      ◆它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。

Spring对你的工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。

  6、spring的目的?意义?

      ◆目的:解决企业应用开发的复杂性

      ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

      ◆范围:任何Java应用

      意义:1,降低开发成本.2,方便使用.

  7、spring的优缺点

    7.1. 提供了一种管理对象的方法,可以把中间层对象有效地组织起来。一个完美的框架“黏合剂”。

    7.2. 采用了分层结构,可以增量引入到项目中。

    7.3. 有利于面向接口编程习惯的养成。

    7.4. 目的之一是为了写出易于测试的代码。

    7.5. 非侵入性,应用程序对Spring API的依赖可以减至最小限度。

    7.6. 一致的数据访问介面。

    7.7. 一个轻量级的架构解决方案。

    7.8缺点:目前不支持集群

  8、spring带给我们什么

    ◆方便解耦,简化开发

    通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

    ◆AOP编程的支持

    通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

    ◆声明式事务的支持

    在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

    ◆方便程序的测试

    可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。

    ◆方便集成各种优秀框架

    Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。

    ◆降低Java EE API的使用难度

    Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。

    ◆Java 源码是经典学习范例

  9、spring能做什么

    Spring的主要目的是使J2EE易用和促进好编程习惯。

    Spring的目标是使已存在的技术更加易用。

spring框架的总结的更多相关文章

  1. Spring框架概述

    Spring是最流行的Java企业级应用开发框架,全球数以百万的开发者在使用Spring框架创建高性能.易测试.可重用的代码. Spring框架的核心特性可以应用于任何Java应用,但扩展的JavaE ...

  2. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  3. Spring 框架的架包分析、功能作用、优点,及jar架包简介

    Spring 框架的架包详解    Spring的作用     Spring的优势  由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或 ...

  4. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  5. spring框架学习(三)

    一.Spring自动组件扫描 Spring 提供组件扫描(component scanning)功能.它能从指定的classpath里自动扫描.侦测和实例化具有特定注解的组件. 基本的注解是@Comp ...

  6. Spring框架学习(一)

    一. spring概述 Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式,如图 1 所示. 图 1 ...

  7. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

  8. 使用 Spring Boot 快速构建 Spring 框架应用--转

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/ Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2 ...

  9. 【Spring】浅析Spring框架的搭建

    c目录结构: // contents structure [-] Spring是什么 搭建Spring框架 简单Demo 1,建立User类 2,建立Test类 3,建立ApplicationCont ...

  10. Spring框架总结

    Spring(由Rod Johnson创建的一个开源框架) Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spr ...

随机推荐

  1. 1.8-1.10 大数据仓库的数据收集架构及监控日志目录日志数据,实时抽取之hdfs系统上

    一.数据仓库架构 二.flume收集数据存储到hdfs 文档:http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html#hd ...

  2. Bootstrap表格分页(二)

    本文使用Bootstrap-table来对表格进行分页,关于Bootstrap-table以及下载插件包请点击官网:http://bootstrap-table.wenzhixin.net.cn 首先 ...

  3. Spring Boot 学习系列(04)—分而治之,多module打包

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 明确功能,各司其职 在一个结构清晰的项目中,一个没有module划分的结构显然不是最佳实践.有人会说可以在同 ...

  4. HDU1083 【匹配问题】

    题意: 有P门课,N个学生,给出每门课上的人. 然后问你能不能使得每门课有一个课代表 思路: 课和学生是两类,且同类之间没有关系,构成二分图:直接就是一个最大匹配问题: 注意点: 1.是给课进行匹配不 ...

  5. caller和callee的解析与使用-型参与实参的访问

    caller:是一个函数引用(当前执行函数”被调用的地方”{即这个”被调用的地方”函数引用},如果这个”被调用的地方”是window,则返回[null]),是函数名的属性: var a = funct ...

  6. U3D手游《苍穹变》性能优化经验谈

    4月11日,由unity公司举办的Unite 2016大会在上海正式举行,在4月12日的案例分享专场会议上,天神互动U3D高级开发工程师康凯以手游<苍穹变>为例讲述了3DMMOARPG游戏 ...

  7. JavaSE 帮助文档下载

  8. ios 微信登录相关

    引入项目的文件 info.plist 添加内容 WXApi.registerApp(Config.wx.APP_ID,enableMTA: true)//注册微信api(在AppDelegate里面注 ...

  9. Linux | C代码的编写、运行和调试

    1.  建立.c文件 在终端下输入:vi mytest.c [使用编辑器 vim] 键入键盘i键,使vi编辑器进入编辑模式 接下来在vi编译器中编写代码,如: #include <stdio.h ...

  10. Codeforces Round #541 (Div. 2) A.Sea Battle

    链接:https://codeforces.com/contest/1131/problem/A 题意: 给两个矩形,一个再上一个在下,求两个矩形合并的周围一圈的面积. 思路: 因为存在下面矩形宽度大 ...