Spring框架知识整理
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框架知识整理的更多相关文章
- Spring Ioc知识整理
Ioc知识整理(一): IoC (Inversion of Control) 控制反转. 1.bean的别名 我们每个bean元素都有一个id属性,用于唯一标识实例化的一个类,其实name属性也可用来 ...
- 2018/9/6 spring框架的整理
spring知识的巩固整理AOP和ioc概念,以及了解到了为何要使用spring框架的目的,作用:变换资源获取的方向.更像是按需所求.配置bean的方式:利用XML的方式,基于注解的方式两种.1通过全 ...
- Spring框架知识总结-注入Bean的各类异常
近日整合sping和hibernate框架时遇到了一系列的异常,本次主要说明一下spring框架可能出现的异常及解决方案. 我们借助sping强大的bean容器管理机制,通过BeanFactory轻松 ...
- Java开源框架知识整理
1.Spring的了解 Spring是一个轻量级的IOC/DI和AOP容器的开源框架.可以实现Java模块化开发,贯穿表现层,业务层,逻辑层,实现各层之间的解耦合关系. IOC,控制反 ...
- Spring框架知识梳理(一) IOC
1 写在前面 Spring框架是在大一的时候学习的,但是经过几个项目下来发现自己只不过会用某些常用的东西,对于Spring家族,虽然现在大都使用Spring Boot开发,但是我发现Spring框架的 ...
- Spring AOP 知识整理
通过一个多月的 Spring AOP 的学习,掌握了 Spring AOP 的基本概念.AOP 是面向切面的编程(Aspect-Oriented Programming),是基于 OOP(面向对象的编 ...
- MyBatis框架知识整理
MyBatis框架 一.介绍: MyBatis实际上是Ibatis3.0版本以后的持久化层框架[也就是和数据库打交道的框架]! 和数据库打交道的技术有: 原生的JDBC技术---> Spring ...
- Flex Cairngorm框架知识整理
简介: Cairngorm是一个开源的Flex项目,为FLex提供了一个类似MVC的体系结构框架,它是Flex RIA开发的最好框架之一.使用Cairngorm框架可以大大提高开发和维护的效率. Ca ...
- Spring 框架学习整理
JDBC操作数据库的基本入门中存在什么问题? * 导致驱动注册两次是个问题,但不是严重的. * 严重的问题:是当前类和mysql的驱动类有很强的依赖关系. * 当我们没有驱动类的时候 ...
随机推荐
- (二)surging 微服务框架使用系列之surging 的准备工作consul安装
suging 的注册中心支持consul跟zookeeper.因为consul跟zookeeper的配置都差不多,所以只是consul的配置 consul下载地址:https://www.consul ...
- 从一个点子到一个社区APP,是如何通过.NET实现的?——“文林物业系统”APP介绍及采访记录
“文林物业系统”(简称“文林社区”)是一款与物业管理软件无缝衔接的移动端系统.可在线查看通知公告.报修.投诉建议.查询物业管理费.水电气等其他费用,并且支持在线缴费.以物业管理为接入点,在未来,将会致 ...
- 杭电ACM2020--绝对值排序
输入n(n<=100)个整数,按照绝对值从大到小排序后输出.题目保证对于每一个测试实例,所有的数的绝对值都不相等. Input 输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整 ...
- mysql触发器new和old
下面为您介绍mysql触发器new old的相关知识,供您参考学习,如果您在mysql触发器方面遇到过类似的问题,不妨一看,相信对您会有所帮助. mysql触发器new old: "NEW ...
- Web 性能优化:Preload与Prefetch的使用及在 Chrome 中的优先级
摘要: 理解Preload与Prefetch. 原文:Web 性能优化:Preload,Prefetch的使用及在 Chrome 中的优先级 作者:前端小智 Fundebug经授权转载,版权归原作者所 ...
- 001. Java内存中的字符编码
Java内存中的字符编码 Unicode字符集及utf-8 .utf-16.utf-32 等字符编码方式 字符集:字符表示的数字集合,元素称为码点或码位: 字符编码:字符实际的储存表示: 码点:一个码 ...
- 基于Xamarin Android实现的简单的浏览器
最近做了一个Android浏览器,当然功能比较简单,主要实现了自己想要的一些功能……现在有好多浏览器为什么还要自己写?当你使用的时候总有那么一些地方不如意,于是就想自己写一个. 开发环境:Xamari ...
- Openlayers系列(一)关于地图投影相关错误的解决方案
背景 近期开发以MongoDB为基础的分布式地理数据管理平台系统,被要求做一个简单的demo给客户进行演示.于是笔者便打算向数据库中存储一部分瓦片数据,写一个简单的存取服务器,使用Openlayers ...
- HTML5 新增的 input 事件
以往 HTML 的 input 輸入框,無法即時反映使用者的輸入內容.onkeyup.onkeydown 事件,無法即時.精確地取得使用者的輸入資料:而 onchange.onblur 事件,要等到失 ...
- Android 沉浸式状态栏完美解决方案
现在搜索Android 沉浸式状态栏,真的是一堆一堆,写的特别多,但是真正用的舒服的真没有,在这里自己整理一下开发记录 注意,在使用这个步骤过程之前,请把之前设置的代码注释一下 把布局带有androi ...