你真的了解Spring Framework吗?
Java 框架
上世纪90年代,使用Java开发Web应用普遍使用J2EE标准,J2EE具有平台无关性,对事务、消息等企业级的特性都有很好的支持,但当时的J2EE仍存在一些问题:
非常复杂:EJB的诞生是为了使Java EE的开发变得简单,但是在当时它并没有实现这个目标,完成一个组件需要配置许多的XML文件、本地接口、远程接口等等。
组件依赖耦合:当一个组件依赖另一个组件时,它必须通过名称自己查找依赖,而名称是写在代码中的,就是所谓的“硬编码”。
重量级:无论用户是否需要,当时像集群、远程调用等这些特性全部被支持,不得不去配置。这些使得程序变得非常臃肿,不灵活。
当时存在的这些问题就导致了市场上出现了各种各样的Java 框架。比如现在被我们熟知的Spring Framework。
Spring
早在2002年的11月份,Rod Johnson 发表了一本名为《Expert One-on-One J2EE Design and Development》的书。这本书中就包含了Spring 框架代码,最初这个框架叫做“Interface 21 framework”(直接取 com.interface21 包名),后来 Yann 提议命名为 Spring(春天),寓意 :Spring代表了一个新的开始,结束了传统J2EE开发的“寒冬”。

Spring是一个用于Java企业开发,强大的轻量级应用开发框架。在某种程度上,Spring可以看做是框架的框架——它可以整合多种框架,如:Struts、Hibernate等,也就有了我们所熟知SSH(Struts+Spring+Hibernate)。Spring采用分层架构的设计,发展至今,已经包含了20多个模块,不同的模块有着不同的功能,可以选择使用。

Core Container:容器包含了spring-core,spring-beans,spring-context,spring-context-support,spring-expression这五个模块,包含IoC、DI核心特性。
AOP & Instrumentation:spring-aop提供了一个面向切面编程的实现,单独的spring-aspects模块提供与AspectJ框架的集成。
Messaging:spring-messaging 是Spring 4中新添加的模块,为集成messaging api和消息协议提供支持。同样也提供了一些映射消息到方法的注解,类似spring mvc注解。
Data Access/Integration:不难理解,为数据访问层提供支持,包含JDBC, ORM,OXM, JMS 和 Transaction 模块。
Web:包含spring-web,spring-webmvc, spring-websocket,和 spring-webmvc-portlet模块。主要为Web开发提供支持。
Test:spring-test模块使用JUnit或者TestNG为Spring各个组件提供单元测试与集成测试。
IoC & DI
控制反转(Inversion of Control,IoC)是框架(framework)的公共特性,IoC可以认为是一种全新的设计模式,但是理论和时间成熟相对较晚,并没有包含在GoF中。IOC体现了著名的The Hollywood principle-好莱坞原则:don’t call us, we’ll call you。为什么“控制反转”是 frameworks的特性,我在 Framework VS Library 一文中做过简单的分析。
实际上我们对于IOC设计模式很熟悉,还记得《大话设计模式》中大鸟教小菜如何应对数据库更换吗?可以参考我的另一篇文章:如何应对数据库更换(三层架构+抽象工厂+反射+配置文件)。
传统程序设计是在一个对象内部通过new创建它所依赖的对象,是程序员在代码中控制对象的创建。这样类与类之间就高度耦合了,程序变得非常不灵活,不易于复用。而有了IoC容器后,创建和查找依赖对象的控制权交到了容器手中,有容器注入依赖对象,对象与对象之间的关系变成了松耦合。那么这个IoC容器不就是我们熟悉的工厂吗,抽象工厂+反射+配置文件就是控制反转的一种实现。

控制反转不等于依赖注入,他们是同一个概念不同角度的描述。仅仅讲控制反转,那么到底是哪些层面的控制被反转了,所以使用IOC这个概念描述Spring等框架的特性就比较含糊。面向对象设计中大师级的人物Martin Fowler就此在他的 Inversion of Control Containers and the Dependency Injection pattern 博客文章中提出了依赖注入(Dependency Injection,DI)的概念。
IoC 告诉我们:容器控制对象,而 DI 告诉我们:被注入对象依赖IoC容器配置依赖对象。
转自:https://www.sohu.com/a/198201231_826634
你真的了解Spring Framework吗?的更多相关文章
- Spring系列(零) Spring Framework 文档中文翻译
Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...
- Spring framework核心
这一部分涵盖了Spring框架绝对不可或缺的所有技术. 1.IOC容器 1.1Spring IoC容器和beans介绍 org.springframework.beans和org.springfram ...
- 浅谈对Spring Framework的认识
Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...
- Hello Spring Framework——依赖注入(DI)与控制翻转(IoC)
又到年关了,还有几天就是春节.趁最后还有些时间,复习一下Spring的官方文档. 写在前面的话: Spring是我首次开始尝试通过官方文档来学习的框架(以前学习Struts和Hibernate都大多是 ...
- 手动创建Spring项目 Spring framework
之前学习框架一直是看的视频教程,并且在都配套有项目源码,跟着视频敲代码总是很简单,现在想深入了解,自己从官网下载文件手动搭建,就遇到了很多问题记载如下. 首先熟悉一下spring的官方网站:http: ...
- 转-Spring Framework中的AOP之around通知
Spring Framework中的AOP之around通知 http://blog.csdn.net/xiaoliang_xie/article/details/7049183 标签: spring ...
- spring 官方下载地址(Spring Framework 3.2.x&Spring Framework 4.0.x)
spring官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...
- Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中的spring web MVC模块
spring framework中的spring web MVC模块 1.概述 spring web mvc是spring框架中的一个模块 spring web mvc实现了web的MVC架构模式,可 ...
- Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中web相关的知识(概述)
Spring Framework中web相关的知识 1.概述: 参考资料:官网documentation中第22小节内容 关于spring web mvc: spring framework中拥有自 ...
随机推荐
- nginx 总结
本文转自:http://freeloda.blog.51cto.com/2033581/1288553 ,感谢大神的辛勤付出! 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之 ...
- json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例
json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar ...
- mysql 替换函数replace()实现mysql 替换字符串
mysql 替换字符串的实现方法:mysql中replace函数直接替换mysql数据库中某字段中的特定字符串,不再需要自己写函数去替换,用起来非常的方便,mysql 替换函数replace()Upd ...
- C/C++中的位运算
位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有: &(按位与).|(按位或) ...
- Linux 系统版本查询
显示Linux版本信息 输入"cat /proc/version",说明正在运行的内核版本. 输入"cat /etc/issue", 显示的是发行版本信息. 输 ...
- Linux 系统版本信息
1.# uname -a (Linux查看版本当前操作系统内核信息) 2.# cat /proc/version (Linux查看当前操作系统版本信息) 3.# cat /etc/issue 或 ...
- 关于编译安装php
之前也装过一次是nginx和php的, 这次也是... but, 不知道是不是版本的问题还是环境方面的影响, 导致之前的gd库是安装失败的, 所以上次安装zabbix也是失败的, 这次换了5.6.2版 ...
- PHP安装包TS和NTS的区别
原文链接:http://blog.csdn.net/zhuifengshenku/article/details/38796555 TS指Thread Safety,即线程安全,一般在IIS以ISAP ...
- 20145322 《网络对抗》 MSF基础应用1
20145322何志威 Exp5 MS08_067漏洞测试 实验问答 什么是exploit.payload.encode exploit:通过一个漏洞对程序进行攻击的过程 payload:有具体功能作 ...
- Python3基础 json.loads 解析json格式的数据,得到一个字典
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...