Spring框架主要构成

Spring框架主要有7个模块:
1.Spring AOP:面向切面编程思想,同时也提供了事务管理。
2.Spring ORM:提供了对Hibernate、myBatis的支持。
3.Spring DAO:提供了 对Data Access Object模式和JDBC的支持。实现业务逻辑与数据库访问代码分离,降低代码耦合度。
4.Spring Web:提供了Servlet监听器的Context和Web应用的上下文。
5.Spring Context:提供了Spring上下文环境,以及其他如国际化、Email等服务。
6.Spring MVC:提供了MVC设计模式的实现。
7.Spring core:提供了Spring框架基本功能(IOC功能),如工厂模式BeanFactory创建所需对象、通过读取xml文件实例化对象、组件生命周期管理等。

IOC

Inverse of Control控制反转或叫依赖注入,是一种降低对象之间耦合关系的设计思想。
一般而言,在分层体系结构中,都是上层调用下层的接口,上层依赖于下层的执行, 即调用者依赖于被调用者。
而通过 IoC 方式, 使得上层不再依赖于下层的接口,即通过采用一定的机制来选择不同的下层实现, 完成控制反转, 使得由调用者来决定被调用者。
IoC 通过注入一个实例化的对象来达到解耦和的目的。使用这种方法后,对象不会被显式地调用,而是根据需求通过 IoC 容器( Spring)来提供。

举个例子来说IOC

采用 IoC 机制能够提高系统的可扩展性, 如果对象之间通过显式的调用进行交互, 那么会导致调用者与被调用者存在着非常紧密的联系, 其中一方的改动将会导致程序出现很大的
改动。
例如,要为一家卖茶的商店提供一套管理系统,在这家商店刚开业的时候只卖绿茶(Green Tea) ,随着规模的扩大或者根据具体销售量,未来可能会随时改变茶的类型,例如红
茶(Black Tea)等,传统的实现方法会针对茶抽象化一个基类,绿茶类只需要继承自该基类即可。
采用该实现方法后,在需要使用 Green Tea 的时候,只需要执行以下代码即可:Abstract Teat = new Green Tea(),当然,这种方法是可以满足当前设计要求的。但是该方法的可扩展
性不好,存在着不恰当的地方。
例如,当商家发现绿茶的销售并不好,决定开始销售红茶(Black Tea) 时, 那么只需要实现一个 Black Tea 类, 并且让这个类继承自 Abstract Tea 即可。
但是,在系统中所有用到 Abstract Tea t = new Green Tea()的地方,都需要被改为 Abstract Teat = new Black Tea(),而这种创建对象实例的方法往往会导致程序的改动量非常大。
那么怎样才能增强系统的可扩展性呢?此时可以使用设计模式中的工厂模式将创建对象的行为包装起来
可以把创建对象的过程委托给 TeaFatory 来完成,在需要使用 Tea 对象的时候,只需要调用 Factory 类的 get Tea 方法即可,具体创建对象的逻辑在 TeaFactory 中来实现, 那么当商家需要把绿茶替换为红茶的时候, 系统中只需要改动 TeaFactory 中创建对象的逻辑即可。当采用了工厂模式后,只需要在一个地方做改动就可以满足要求,从而增强了系统的可扩展性。

虽然说采用工厂设计模式后增强了系统的可扩展性, 但是从本质上来讲, 工厂模式只不过是把程序中会变动的逻辑移动到工厂类里面了, 当系统中的类较多的时候, 在系统扩展时
需要经常改动工厂类中的代码。而采用 IoC 设计思想后,程序将会有更好的可扩展性。

Spring 容器将会根据配置文件来创建调用者对象(Sale) ,同时将被调用的对象(AbstractTea 的子类)的实例化对象通过构造方法或 set 方法的形式注入到调用者对象中。
当需要把 Blue Tea 改为 Black Tea 时,只需要修改上述配置文件即可,而不需要修改代码。

IOC特点

具体而言,IoC 主要有以下几个方面的优点:
1)通过 IoC 容器,开发人员不需要关注对象是如何被创建的,同时,增加新类也非常方便,只需要修改配置文件即可实现对象的热插拔。
2)IoC 容器可以通过配置文件来确定需要注入的实例化对象,因此,非常便于进行单元测试。
尽管如此,IoC 也有自身的缺点,具体表现为如下两点:
1)对象是通过反射机制实例化出来的,因此,会对系统的性能有一定的影响。
2)创建对象的流程变得比较复杂。

Spring框架知识整理的更多相关文章

  1. Spring Ioc知识整理

    Ioc知识整理(一): IoC (Inversion of Control) 控制反转. 1.bean的别名 我们每个bean元素都有一个id属性,用于唯一标识实例化的一个类,其实name属性也可用来 ...

  2. 2018/9/6 spring框架的整理

    spring知识的巩固整理AOP和ioc概念,以及了解到了为何要使用spring框架的目的,作用:变换资源获取的方向.更像是按需所求.配置bean的方式:利用XML的方式,基于注解的方式两种.1通过全 ...

  3. Spring框架知识总结-注入Bean的各类异常

    近日整合sping和hibernate框架时遇到了一系列的异常,本次主要说明一下spring框架可能出现的异常及解决方案. 我们借助sping强大的bean容器管理机制,通过BeanFactory轻松 ...

  4. Java开源框架知识整理

    1.Spring的了解     Spring是一个轻量级的IOC/DI和AOP容器的开源框架.可以实现Java模块化开发,贯穿表现层,业务层,逻辑层,实现各层之间的解耦合关系.     IOC,控制反 ...

  5. Spring框架知识梳理(一) IOC

    1 写在前面 Spring框架是在大一的时候学习的,但是经过几个项目下来发现自己只不过会用某些常用的东西,对于Spring家族,虽然现在大都使用Spring Boot开发,但是我发现Spring框架的 ...

  6. Spring AOP 知识整理

    通过一个多月的 Spring AOP 的学习,掌握了 Spring AOP 的基本概念.AOP 是面向切面的编程(Aspect-Oriented Programming),是基于 OOP(面向对象的编 ...

  7. MyBatis框架知识整理

    MyBatis框架 一.介绍: MyBatis实际上是Ibatis3.0版本以后的持久化层框架[也就是和数据库打交道的框架]! 和数据库打交道的技术有: 原生的JDBC技术---> Spring ...

  8. Flex Cairngorm框架知识整理

    简介: Cairngorm是一个开源的Flex项目,为FLex提供了一个类似MVC的体系结构框架,它是Flex RIA开发的最好框架之一.使用Cairngorm框架可以大大提高开发和维护的效率. Ca ...

  9. Spring 框架学习整理

    JDBC操作数据库的基本入门中存在什么问题? *   导致驱动注册两次是个问题,但不是严重的. *   严重的问题:是当前类和mysql的驱动类有很强的依赖关系. *      当我们没有驱动类的时候 ...

随机推荐

  1. Java将数据按列写入Excel并设置格式(字体、背景色、自动列宽、对齐方式等)

    本文使用jxl.jar工具类库将数据按列写入Excel并设置格式(字体.背景色.自动列宽.对齐方式等). /** * 按列写入Excel并设置格式 * * @param outputUrl * 输出路 ...

  2. https浅析

    https浅析  http协议本身有着很大的缺陷  1. 通信使用明文,若被抓包,则直接被窃取信息  2. 不验证与自身通信者的身份,有可能遭到伪装  - 在数据传输的过程中,经过了某一计算机,该计算 ...

  3. C#工具:Ado.Net SqlServer数据库 MySql数据库

    数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库. SqlServer调用数据库 using System; using System.Coll ...

  4. Java_基础篇(数组排序)

    Java_基础之数组排序(从小到大) 1.冒泡排序: 冒泡排序可以写成两层循环. 每次循环将最大的数值交换到数组的最后一个. 每排序完一次,后面就少比较一次.所以二层循环的判断条件写成:arry.le ...

  5. 在java中如何实现字符串的反转

    如 "abcdt" 反转之后是 "tdcba" 思路1: 运用递归的方法进行反转 假设反转方法为 reverseString(String str)1)当字符串 ...

  6. React-组件的生命周期详解(含React16版本)

    在一个组件的整个生命周期中,通过用户的交互来更新state或者props,重新渲染组件,更新页面的ui.组成一个简单的"状态机". react的生命周期三个阶段: Mounting ...

  7. pyltp安装踩坑记录

    LTP(Language Technology Platform)由哈工大社会计算与信息检索研究中心开发,提供包括中文分词.词性标注.命名实体识别.依存句法分析.语义角色标注等丰富. 高效.精准的自然 ...

  8. 【Android】用Cubism 2制作自己的Live2D——软件的安装与破解!

    前言- 上文我们简单的了解了Cubism的情况,但是Cubism 2.X安装好以后如果不进行破解只能使用Free版本,这是我们接受不了的,我们是专业的.是来学习的,怎么能不用Pro版本呢?所以话不多说 ...

  9. Android launcher 壁纸 wallpaper

    壁纸分为动态和静态两种: 如果只需要修改默认静态壁纸,替换frameworks/base/core/res/res/drawable/default_wallpaper.jpg即可,或者在源码中修改对 ...

  10. linux添加crontab定时任务

    1.crontab -e命令进入linux定时任务编辑界面,举个简单的例子,比如我要定时往txt文件写入 */ * * * * .txt */1就是每隔一分钟像文件写入,其他一些详细的操作大家可以去网 ...