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的驱动类有很强的依赖关系. * 当我们没有驱动类的时候 ...
随机推荐
- nginx rewrite 实现URL跳转
最近工作中常常要改nginx配置,学习了nginx中rewrite的用法 URL跳转这里说的URL跳转就是用户在访问一个URL时将其跳转到另一个URL上.常见的应用场景是让多个域名跳转到同一个URL上 ...
- C# 连接/查询Jira
查询jira数据,如果是前端,可以按照如下格式直接访问,获取数据 http://jira.company.com/rest/api/2/search?jql=project = REM AND res ...
- 给dao层注入jdbcTemplate时的一个强行bug(jdbcDaoSupport不要随便用!用了要记得!)
记录Dao层一个鱼唇至极的错误 这一天我在使用Spring的进行注解配置项目时, 我的Idea给我抛了一个如下的错误: Exception in thread "main" org ...
- Java中数组的插入,删除,扩张
Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...
- Fragment生命周期以及使用时的小问题
前言- 昨天在写UI的时候用到了FRAGMENT,发现自己对此还不是非常了解,借此机会记录一下 Fragment的生命周期- 官方生命周期图: Fragment每个生命周期方法的意义.作用- onVi ...
- 每天五分钟-javascript数据类型
javascript数据类型分为基本数据类型与复杂数据类型 基本数据类型包括:string,number,boolean,null,undefined,symbol(es6) 复杂数据类型包括:obj ...
- ORM初探(一)
Object Relational Mapping(ORM): 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象 ...
- Linux运维跳槽必备的40道面试精华题(转)
Linux运维跳槽必备的40道面试精华题(转) 下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作. 1.什么是运维?什么是游戏运维? 1)运维 ...
- mysql No query specified
MySQL SHOW CREATE TABLE tablename \G; 会出现 ERROR: No query specified 原因 去掉分号 ; \g \G三者选其一即可.
- mybaties xml 的头部
config.xml的头部: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE config ...