一、Spring简介

  Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,

分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring的用途可以用于服务端的开发,

还可以从简单性、可测试性和松耦合的角度来说,任何Java应用都可以从Spring中受益。Spring 的核心是面向切面编程(AOP)和控制反转 (IOC) 容器。

简单来说Spring 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级开源框架。

二、Spring框架

  Spring框架是一个分层架构,由七个良好的模块组成。Spring模块构建在核心容器之上, 核心容器定义了创建、配置和管理Bean方式 , 入下图所示。

  

  组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

  • 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
  • Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
  • Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
  • Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  • Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
  • Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

三、控制反正(IOC)

    传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者getInstance 
  等直接或者间接调用构造方法创建一个对象,而在 Spring 开发模式中, Spring容器使用了
  工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Sprin为我
  们提供的对象即可,这就是控制反转的思想。实例化一个 java 对象有三种方式:使用类构
  造器,使用静态工厂方法,使用实例工厂方法,当使用 spring 时我们就不需要关心通过何
  种方式实例化一个对象, spring 通过控制反转机制自动为我们实例化一个对象。

  

    依赖注入(DI):Spring 使用 Java Bean 对象的 Set 方法或者带参数的构造方法为我们在
  创建所需对象时将其属性自动设置所需要的值的过程就是依赖注入的基本思想。

四、面向切面编程(AOP)

    在面向对象编程(OOP)思想中,我们将事物纵向抽象成一个个的对象。而在面向切
  面编程中,我们将一个个对象某些类似的方面横向抽象成一个切面,对这个切面进行一
  些如权限验证,事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。

    在 Spring 中,所有管理的对象都是 JavaBean 对象,而 BeanFactory 和 ApplicationContext 就
  是 spring框架的两个 IOC 容器,现在一般使用 ApplicationContext,其不但包含了 BeanFactory
  的作用,同时还进行更多的扩展。

  
  1、AOP底层实现:

  代理机制 :

  • JDK 的动态代理:针对实现了接口的类产生代理.。
  • Cglib 的动态代理 : 针对没有实现接口的类产生代理. 应用的是底层的字节码增强的技术 生成当前类的子类对象。

  

  

  2、AOP的开发中相关术语:

     Joinpoint(连接点) : 所谓连接点是指那些被拦截到的点。在Spring中, 这些点指的是方法, 因为spring只支持方法类型的连接点。

     Pointcut(切入点) : 所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义 。

     Advice(通知/增强) : 所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知.。通知分为前置通知、后置通知、异常通知、最终通知、环绕通知(切面要完成的功能)。

     Introduction(引介) : 引介是一种特殊的增强,它为类添加一些属性和方法。这样,即使一个业务类原本没有实现某个接口,通过AOP的引介功能,我们可以动态地为该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。

     Target(目标对象):代理的目标对象。

     Proxy(代理):一个类被AOP织入增强后,就产出了一个结果类,它是融合了原类和增强逻辑的代理类。  

     Aspect(切面) : 切面由切点和增强(引介)组成,它既包括了横切逻辑的定义,也包括了连接点的定义,Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。

     Weaving织入): 织入是将增强添加对目标类具体连接点上的过程。AOP像一台织布机,将目标类、增强或引介通过AOP这台织布机天衣无缝地编织到一起。根据不同的实现技术,AOP有三种织入的方式:
        a、编译期织入,这要求使用特殊的Java编译器。
        b、类装载期织入,这要求使用特殊的类装载器。
        c、动态代理织入,在运行期为目标类添加增强生成子类的方式。
        Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。

注:未完, 待续。

  

浅谈Spring框架的更多相关文章

  1. 浅谈Spring框架注解的用法分析

    原文出处: locality 1.@Component是Spring定义的一个通用注解,可以注解任何bean. 2.@Scope定义bean的作用域,其默认作用域是”singleton”,除此之外还有 ...

  2. 浅谈Spring中的Quartz配置

    浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...

  3. 【SSH学习笔记】浅谈SSH框架

    说在前面 本学期我们有一门课叫做Java EE,由陈老师所授,主要讲的就是Java EE 中的SSH框架. 由于陈老师授课风格以及自己的原因导致学了整整一学期不知道在讲什么,所以才有了自己重新学习总结 ...

  4. 浅谈Spring的两种配置容器

    浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41   作者:黄小鱼ZZZ     ...

  5. 手撸ORM浅谈ORM框架之基础篇

    好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...

  6. 手撸ORM浅谈ORM框架之Add篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  7. 手撸ORM浅谈ORM框架之Update篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  8. 手撸ORM浅谈ORM框架之Delete篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  9. 手撸ORM浅谈ORM框架之Query篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

随机推荐

  1. Django学习之模板层

    三板斧 render,HttpResponse,redirectrender返回一个HTML页面,并且还能够给该页面传数据render内部原理: from django.template import ...

  2. jQuery实现button按钮提交表单

    在JSP页面中,通常使用button按钮提交表单数据,使用jQuery实现代码如下: <span style="font-family:Comic Sans MS;font-size: ...

  3. QLIKVIEW添加数据库连接

    1.点击文件 2.点击编辑脚本 3.点击 工具-ODBC管理员 4.添加DSN 5.里面的常规操作不再赘述 6.完成

  4. 对TD tree的使用体验及建议

    TDtree与QQ空间有着相似的功能,你可以在里面发表自己的感受与心情,也可以存储照片或者给喜欢的说说点赞.发表评论等,可以说这是一个将QQ空间从QQ里独立出来的软件.作为一个娱乐性的软件,它的功能还 ...

  5. cs231n spring 2017 lecture16 Adversarial Examples and Adversarial Training

    (没太听明白,以后再听) 1. 如何欺骗神经网络? 这部分研究最开始是想探究神经网络到底是如何工作的.结果人们意外的发现,可以只改变原图一点点,人眼根本看不出变化,但是神经网络会给出完全不同的答案.比 ...

  6. 吴裕雄--天生自然python学习笔记:Python3 JSON 数据解析

    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. Python3 中可以使用 json 模块来对 JSON 数据进 ...

  7. IP地址结构分类(包括主机号和网络好计算)

    IP地址:互联网上的每个接口的唯一标识. 长度:32bit. 五类不同的互联网地址格式: 各类IP地址范围: 点分十进制:32位的地址通常写成四个十进制数,其中每个整数对应一个字节. 主机号和网络的计 ...

  8. setContext or setCharacterEncoding

    request.setCharacterEncoding()是设置从request中取得的值或从数据库中取出的值response.setContentType("text/html;char ...

  9. 转: zabbix3.2.1安装graphtrees插件

    转自 : http://blog.csdn.net/liang_baikai/article/details/53542317 graphtree介绍 由于zabbix的图像显示一块不太友好,图像没法 ...

  10. 吴裕雄--python编程:CGI编程

    什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户 ...