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吗?的更多相关文章

  1. Spring系列(零) Spring Framework 文档中文翻译

    Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...

  2. Spring framework核心

    这一部分涵盖了Spring框架绝对不可或缺的所有技术. 1.IOC容器 1.1Spring IoC容器和beans介绍 org.springframework.beans和org.springfram ...

  3. 浅谈对Spring Framework的认识

    Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...

  4. Hello Spring Framework——依赖注入(DI)与控制翻转(IoC)

    又到年关了,还有几天就是春节.趁最后还有些时间,复习一下Spring的官方文档. 写在前面的话: Spring是我首次开始尝试通过官方文档来学习的框架(以前学习Struts和Hibernate都大多是 ...

  5. 手动创建Spring项目 Spring framework

    之前学习框架一直是看的视频教程,并且在都配套有项目源码,跟着视频敲代码总是很简单,现在想深入了解,自己从官网下载文件手动搭建,就遇到了很多问题记载如下. 首先熟悉一下spring的官方网站:http: ...

  6. 转-Spring Framework中的AOP之around通知

    Spring Framework中的AOP之around通知 http://blog.csdn.net/xiaoliang_xie/article/details/7049183 标签: spring ...

  7. spring 官方下载地址(Spring Framework 3.2.x&Spring Framework 4.0.x)

    spring官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...

  8. 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架构模式,可 ...

  9. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中web相关的知识(概述)

    Spring Framework中web相关的知识 1.概述: 参考资料:官网documentation中第22小节内容 关于spring web mvc:  spring framework中拥有自 ...

随机推荐

  1. JSON语法2

    把 JSON 文本转换为 JavaScript 对象 JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 Jav ...

  2. 用Python实现随机森林算法,深度学习

    用Python实现随机森林算法,深度学习 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.bagging(bootstrap aggregating 的缩 ...

  3. centos 网卡配置

    地址:/etc/sysconfig/network-scripts vi  /etc/sysconfig/network-scripts/ifcfg-eth0 1.固定ip配置 DEVICE=eth0 ...

  4. Linux中Postfix邮件接收配置(四)

    Dovecot介绍 MRA邮件取回代理也有很多如courier-imap,cyrus-imap和dovecot这三个个工具,下面重点介绍Dovecot: 1.高安全性.据 Dovecot 的作者声称, ...

  5. bzoj5470 / P4578 [FJOI2018]所罗门王的宝藏

    P4578 [FJOI2018]所罗门王的宝藏 设第$i$行上的值改变了$r1[i]$,第$j$列上的值改变了$r2[i]$ 显然密码$(i,j,c)=r1[i]+r2[j]$ 对于同一列上的两个密码 ...

  6. log4j.properties配置详解与实例

    log4j.properties配置详解与实例 第一步:加入log4j-1.x.x.jar到lib下. 第二步:在工程的src下下建立log4j.properties.内容如下: #OFF,syste ...

  7. 使用fragment添加底部导航栏

    切记:fragment一定要放在framlayout中,不然不会被替换完全(就是切换之后原来的fagment可能还会存在) main.xml <LinearLayout xmlns:androi ...

  8. JavaScript:new function(){}和function(){}()

    继:http://www.cnblogs.com/hongdada/p/3328089.html new function(){} function(){}(): 大概的总结: function(){ ...

  9. 51NOD 1081 子段求和

    1081 子段求和   给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和.   例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} ...

  10. opencv-python 学习初探1

    本人是windows10 ,Python3.6 32位.因为业务需要,需要实现一批图片处理,对比PIL和OpenCV后,选择后者.此文为菜鸟记录,大手子们求放过. 1.下载. 直接 pip insta ...