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. zw版【转发·台湾nvp系列Delphi例程】HALCON FastThreshold1

    zw版[转发·台湾nvp系列Delphi例程]HALCON FastThreshold1 procedure TForm1.Button1Click(Sender: TObject);var img ...

  2. zw版【转发·台湾nvp系列Delphi例程】HALCON Roberts2

    zw版[转发·台湾nvp系列Delphi例程]HALCON Roberts2 procedure TForm1.Button1Click(Sender: TObject);var op: HOpera ...

  3. Java缓存学习之五:spring 对缓存的支持

    (注意标题,Spring对缓存的支持 这里不单单指Ehcache ) 从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache ...

  4. Echarts 的 Java 封装类库 转自 https://my.oschina.net/flags/blog/316920

    转自: https://my.oschina.net/flags/blog/316920 Echarts 的 Java 封装类库:http://www.oschina.net/p/echarts-ja ...

  5. [转载]INNER JOIN连接两个表、三个表、五个表的SQL语句

    SQL INNER JOIN关键字表示在表中存在至少一个匹配时,INNER JOIN 关键字返回行. 1.连接两个数据表的用法: FROM Member INNER JOIN MemberSort O ...

  6. sqlserver 判断各种不存在

    判断数据库是否存在 if exists (select * from dbo.sysobjects where name = '数据库名') --drop database [数据库名] 判断表是否存 ...

  7. PHP中private和public还有protected的区别

    原文链接:http://www.thinkphp.cn/code/1898.html <? //父类 class father{ public function a(){ echo " ...

  8. 20145105 《Java程序设计》第8周学习总结

    20145105 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 通用API 一.日志 (一)日志API简介 java.util.logging:提供日志功能相关类与接口 ...

  9. Disruptor学习笔记(一):基本原理和概念

    一.Disruptor基本原理 在多线程开发中,我们常常遇到这样一种场景:一些线程接受用户请求,另外一些线程处理这些请求.比如日志处理中的日志输入和告警.这种典型的生产者消费者场景十分常见,而生产者消 ...

  10. tomcat部署项目如何去掉项目名称

    去掉项目名和端口: 首先,进入tomcat的安装目录下的conf目录,我的目录是 /usr/local/apache-tomcat-6.0.20/conf,编辑文件server.xml. 1.去除端口 ...