1.1什么是spring?

    • Spring是一个轻量级Java开发框架,最早有Rod Johnson(罗德.约翰逊)创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题,它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供了全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注与应用程序开发
    • Spring最根本的使命是解决企业级的应用开发的复杂性,及简化Java开发
    • Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于它的

    两个核心特性,也就是依赖注入(dependency injection,DI)面向切面编程(aspect
    oriented programming,AOP)
    为了降低Java开发的复杂性,Spring采取了以下4种关键策略**
    基于POJO的轻量级和最小侵入性编程;
    通过依赖注入和面向接口实现松耦合;
    基于切面和惯例进行声明式编程;
    通过切面和模板减少样板式代码。

    耦合
    耦合是指两个实体相互依赖于对方的一个量度.分为一下几种
    1)非直接耦合:两个模块之间没有直接的关系,它们之间的联系完全是通过主模块的控制和调用来实现的
    2)数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数,公共数据结构或外部变量)来交换输入,输出信息的.
    3)标记耦合:一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单的变量
    4)控制耦合:如果一个模块通过传递开关,标志,名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合
    5)外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合
    6)公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称之为公共耦合。公共的数据环境可以是全局数据结构,共享的通信区,内存的公共覆盖区等
    7)内容耦合:如下发生的情形就称之为两个模块之间发生了内容耦合

    1. 一个模块直接访问另一个模块内部数据;
    2. 一个模块不通过正常入口转到另一模块内部;
    3. 两个模块有一部分程序代码重迭(只可能出现在汇编语言中);
    4. 一个模块多个入口.