1、何为框架

简单来说,框架就是制定了一套规范或者规则(思想),让程序员在该规范或规则下进行工作。如上图修楼房,在有框架的情况下,修建工作才高效且有条不紊。楼层钢架规定了大楼的结构,工人按架构添砖放瓦,最终形成了完整的大楼。

在编程中同样如此,框架做一部分功能,我们自己做一部分功能,最终就完成了一个应用程序。框架主要规定了开发应用程序时的整体架构,提供了一些基础功能,还规定了类和对象的如何创建、如何协作等,从而简化我们开发。

正因如此,我们可以看出框架的特点:
  • 半成品,它没有业务流程
  • 封装了一些特定的处理流程和控制逻辑
  • 目的是为了简化开发


2、IOC 和 DI

在讨论为什么使用Spring之前,我们先大概了解下什么是IOC和DI,而再这之前呢,我们还要在先来谈谈面向接口编程。

接口的特点大家已经很熟悉了,它实现了多态性,同时隐藏了具体的功能(实现)。这就导致在面向接口编程中,我们可以便捷地修改具体的实现内容,却不影响各层之间的调用,这一点在公共服务中是尤为重要的。

假如有某接口我们命名为OneInterface,有其实现类我们命名为OneInterfaceImpl,那么我们在使用时,往往是这样:
OneInterface demo = new OneInterfaceImpl(); 
 
1
OneInterface demo = new OneInterfaceImpl(); 

OneInterface的创建工作,是我们通过new来实现的,那么问题来了,假如有成千上百个地方要用到这个接口,我们需要new成千上百次实体类。因为创建工作交给我们自己了,我们不new,它们不会平白无故地出现。

能不能把创建工作交给别人呢?当然可以,这就是所谓的IOC:Inversion of Control 控制反转,应用程序本身将不再负责依赖对象的创建和维护,而是由外部容器负责创建和维护。这里的外部容器,自然就是指框架了。但控制反转只是一种现象描述,如何实现呢?DI,Dependency Injection 依赖注入,就是IOC的一种实现方式,通过创建对象并且组装对象之间的关系(假设A依赖B,那么DI即指容器自动创建A和B,并将B注入set到A中去)。

看个形象的比喻:
 
那么终于谈一谈为什么使用Spring,其中的一个特点,就是因为Spring拥有IOC/DI的能力。


3、AOP

有如上这样三个方法,代码功能各不相同,但是都重复使用到了代码片段A和B。如此场景,比较典型的就是:开启事务,对数据库表进行操作,提交事务。

一些重复的功能,我们可以剥离出来作为公共的方法,可是方法中公共的代码,我们也想剥离出来以共用:
 
我们希望将A、B这些分散在各个业务逻辑中的相同代码,通过横向切割的方式抽取到一个独立的模块中,还业务逻辑类一个清新的世界。这,就是AOP,Aspect Oriented Programming 面向切面编程。

而Spring,就是这样一款支持AOP的框架。


4、Why Spring

说到这里,Why Spring已经显而易见了:
  • IOC/DI
  • AOP
  • 轻量级(非侵入式,从框架来说,即无需继承框架的某类,更换框架后代码也可重用)
  • 容器(管理对象生命周期)
  • 简单的数据库事务管理
  • JDBC抽象及ORM框架支持
  • 灵活的Web层支持
  • 简化各个技术的集成


5、参考链接

[01] Why Spring的更多相关文章

  1. 第01章 Spring概述

    第01章 Spring概述 1.Spring概述 ①Spring是一个开源框架 ②Spring为简化企业级开发而生,使用Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能.同样的 ...

  2. 01点睛Spring MVC 4.1-搭建环境

    转发:https://www.iteye.com/blog/wiselyman-2213906 1.1 简单示例 通篇使用java config @Controller声明bean是一个控制器 @Re ...

  3. 第01章-Spring之旅

    一.简化Java开发 1. Spring的主要特性 依赖注入DI和面向切面编程AOP. 2. 关键策略 轻量级和最小侵入性编程:POJO 松耦合:DI和AOP 声明式编程:切面和惯例 减少样板式代码: ...

  4. Spring Boot-初学01 -使用Spring Initializer快速创建Spring Boot项目 -@RestController+spEL -实现简单SpringBoot的Web页面

    1.IDEA:使用 Spring Initializer快速创建项目 IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目: 选择我们需要的模块:向导会联网创建Spring ...

  5. 01、Spring环境搭建

    环境:SpringSource-Tool-3.9.9.Eclipse4.10.0 首先,我们需要解决的是Spring包的问题,我看了百度.CSDN很多都是直接一上来随便丢个包就可以安装了,搞得我弄了一 ...

  6. 【01】Spring Boot配置文件相关

    1.Spring Boot 获取属性的属性源,优先级从高到低 (1)命令行参数 (2)java:comp/env里的JNDI属性 (3)JVM系统属性 (4)操作系统的环境变量 (5)随机生成的的带r ...

  7. 【Bug档案01】Spring Boot的控制器+thymeleaf模板 -使用中出现静态资源加载路径不当的问题 -解决时间:3h

    总结 - thymeleaf的模板解析规则不清楚,或者忘了; - 出现bug时,瞎调试, 没有打开NETWORK 进行查看资源的加载情况 - 控制器中的其他代码,可以先注释掉,这样就可以迅速屏蔽掉其他 ...

  8. Spring —— 三种配置数据源的方式:spring内置、c3p0、dbcp

    01.Spring内置数据源配置Class:DriverManagerDataSource全限定名:org.springframework.jdbc.datasource.DriverManagerD ...

  9. spring事务管理方式,aop

    达内12 note unit 09 01 1.spring事务管理 2.spring提供了对事务管理支持 spring采用aop机制完成事务控制 可以实现在不修改原有组件代码情况下实现事务控制功能. ...

随机推荐

  1. C语言字符串读入函数笔记

    gets(str)函数和scanf("%s",str)区别: 转自:https://zhidao.baidu.com/question/290403568.html 二者都是从终端 ...

  2. c3p0死锁

    1.APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks! 抛出以下异常信息: com.mchang ...

  3. python小练习:用户三次登陆, 购物车

    2018.12.1 周末练习: 1.用户三次登陆 from random import randint i = 1 while i < 4: num = 0 verify_code = '' w ...

  4. VUE CLI 3.0 项目引入 Mock.js

    mockjs 官网:http://mockjs.com/ 之前没有使用过 mockjs 的同学,请参考官网文档,数据生成规则和方法的调用都有详细说明. 一.通过npm安装依赖包 1. 进入到项目目录, ...

  5. 原生js实现二级联动下拉列表菜单

    二级联动下拉列表菜单的难点在于对后台返回的数据进行解析,不多逼逼,直接上代码 上图是后台返回的数据 实现代码如下: var deviceNotExist = true;//防止数据重复 if(data ...

  6. JSP内置对象——pageContext对象和config对象

    它对应的常用方法有: 现在,我新建一个“pageContext.jsp”页面,可以获得“session_page1.jsp”这个页面中保存的用户名: pageContext.jap: session_ ...

  7. Android开发常用的一些功能列表(转)

    文章来源:http://www.cnblogs.com/netsql/archive/2013/03/02/2939828.html 1.软件自动更新下载,并提示 2.软件登录注册,以及状态保存 3. ...

  8. 聊聊HTTP gzip压缩与常见的Android网络框架

    版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/5835990.html 进入主题之前,我们先来看一下客户端与服 ...

  9. PHP开发APP接口学习笔记

    习要点概述1.APP接口简介 2.封装通信接口方法 3.核心技术 4.APP接口实例 服务器和客户端进行接口数据通信:服务器 -->数据库|缓存 -->调用接口 -->客户端 服务器 ...

  10. 开发测试技巧|辅助开发调试:goolge浏览器利用F12在控制台输入脚本实现表单自动填充

    一个开发测试技巧的指引和截图,利用google浏览器的F12调试和Console执行,注入JavaScript脚本实现表单的自动填充和测试. 原文链接: http://www.lookdaima.co ...