“Spring is the most popular application development framework for enterprise Java.”这是Spring官方首页上的第一句话,其中“enterprise”是一个很重量级的修饰语,它应该与“homework”和“exercise”有本质区别。那么何为“enterprise Java”?能够快速应对客户瞬息万变的业务需求是所有企业级开发的重中之重,当然对于开发enterprise Java application也不例外。换句话说,企业级Java应用程序不仅能正确地实现用户需求,还要能快速地应对用户需求变化。这句话正着说反着说都很容易,但要实现它却很困难。编写程序的语言已经从简单的机器指令进化到了程序设计的工具,设计原则的提出以及实现这些原则的设计模式的广泛应用,都在为此不断地努力。

  在这里停下来想想,表面上看技术潮流翻江倒海,其实都在解决着同一个问题。滚滚洪流中也有定海神针,Robert C. Martin提出的“S.O.L.I.D”原则:

  S = Single Responsibility Principle:一个类应该只有一个发生变化的原因。(There should never be more than one reason for a class to change.)

  O = Opened Closed Principle:软件实体(类、模块、函数等)应该可以扩展,但不可以修改。(Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.)

  L = Liscov Substitution Principle:子类型必须能够替换掉它们的父类型。(Subtypes must be substitutable for their base types.)

  I = Interface Segregation Principle:不应该强迫客户程序依赖并未使用的接口。(Clients should not be forced to depend upon interfaces that they do not use.)

  D = Dependency Inversion Principle:高层模块不应该依赖低层模块,两者都应该依赖于抽象。(High level modules should not depend upon low level modules. Rather, both should depend upon abstractions.)

  除此之外,日志记录,性能统计,安全控制,事务管理,异常处理等特性也是企业级应用程序必须要考虑的问题。综上所述,要想进行真正的企业级开发不是一项容易的工作,Spring由此而生。同样,受到技术浪潮的侵袭,当初以“轻量级”著称的Spring,现在看起来也相当的庞大,这算不算软件行业里的次贷危机呢。拨开过度宣传和速成培训的迷雾,才能看清IoC和AOP这两块躺在Spring河床里的金子。为什么说IoC、AOP有价值呢?因为它们可以降低程序的调用和被调用关系耦合度,从而增强程序的应变能力。与此同时,Spring其它方面的功能都是围绕着IoC和AOP展开的。有了这样的认识,理解和掌握Spring的配置和开发就很简单了。

About Spring的更多相关文章

  1. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  2. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  3. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  4. [Spring]IoC容器之进击的注解

    先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...

  5. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  6. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  7. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  8. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  9. Spring之旅(2)

    Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...

  10. Spring之旅

    Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...

随机推荐

  1. 查询DBlink创建

    DBlink创建 查询 博客分类: Oracle   当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据 ...

  2. JQ优化性能

    一.注意定义jQuery变量的时候添加var关键字这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下:$loading = $('#loading'); / ...

  3. POJ2533 Longest Ordered Subsequence 【最长递增子序列】

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 32192   Acc ...

  4. .NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1)

    原文:.NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1) 一.SQL Server 为什么要与CLR集成 1. SQL Server 提供的存储过程.函数 ...

  5. Android在包名称更改项目

    通常时引起包名称的变化R文件错误,有时原因不明Manifest混乱多个文本文件. 所以,我们现在感到最简单方便的包名称变更流程文件,如以下: 如果程序包命名com.pepper.util,我们将更改包 ...

  6. 几乎没用到过的css 样式

    1. :focus  选择器用于选取获得焦点的元素. 案例:http://www.w3school.com.cn/tiy/t.asp?f=css_sel_focus 2. clearfix清除浮动闭合 ...

  7. JQuery each详细用法

    each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSON 等等在javaScript开发过程中使用$ ...

  8. Javascript Array API

    JS数组对象提供了很多API方法,由于前段时间要用到某一些方法,但是突然一时又想不起来该怎么用了,上网找有很多资料都不全,所以就自己整理了一篇,完全是自己写的的JS,只是复制到这里来了 ,要用到的朋友 ...

  9. CentOS 6.4源码编译安装httpd并启动测试

    今天来总结一下在Linux中软件安装,通常我们应该知道,安装软件有两种方法:一种是软件包的安装,也就是rpm包的安装,就是指这些软件包都是 已经编译好的二进制rpm包,我们通过rpm安装工具和yum安 ...

  10. 加密算法 MD5/SHA1

    近来想学习函数式编程. 但是一直不知道怎么展开这个学习过程,目前的研究进度也不深入,想讲解一些原理也无从下手. 先简单的上一些算法,逐步分析语法和思想.虽然程度不深,但至少能记录这个过程. 本例子用F ...