Spring in action——01.Spring核心

Java最根本的使命:简化Java开发。

是如何简化Java开发的?

  • 基于POJO的轻量级和最小侵入性编程
  • 通过依赖注入和面向接口实现松耦合
  • 基于切面和惯例进行声明式编程
  • 通过切面和模板减少样板式代码

1.激发POJO潜能与依赖注入

侵入式编程方式:很多框架通过强迫应用继承它们的类或实现它们的接口从而导致应用于框架绑死。

任何应用都会由多个类组成,这些类相互之间进行协作来完成特定的业务逻辑。传统做法是,每个对象负责管理与自己相互协作的对象(即它所依赖的对象)的引用,这回导致高度耦合和难以测试的代码。

DI——对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或管理它们的依赖关系。


测试也很简单,只需要给定接口一个mock实现即可。

装配(wiring)—— 创建应用组件之间协作的行为。Spring有多种装配bean的方式,采用XML是一种,使用Java注解来描述配置也是一种方式。

总结:

  • 依赖注入核心本质也是面向接口编程
  • Spring通过应用上下文Application Context装载bean的定义并把它们组装起来。
  • 类似于电脑的主板,负责各个组件之间的关系;类似于中介者模式,负责各个模块之间的交互

2.应用切面

DI能够让相互协作的软件组件保持松散耦合,而面向切面编程(aspect-oriented programming——AOP)允许你把遍布应用各处的功能分离出来形成可重用的组件。

横切关注点:诸如日志、事务管理和安全这样的系统服务经常融入到自身具有核心业务逻辑的组件中去,这些系统服务通常被称为横切关注点,因为它们会跨越系统的多个组件。

如果将这些关注点分散到各个组件中去,代码将会带来双重的复杂性。

  • 实现系统关注点功能的代码将会重复出现在多个组件中。这意味如果要改变这些关注点逻辑,必须修改各个模块中的相关实现。即使你把这些关注点抽象为一个独立的模块,其他模块只是调用它的方法,但方法调用还是会重复出现在各个模块中。
  • 组件会因为那些与自身核心业务无关的代码而变得混乱。

如图,左边的业务对象与右边的系统级服务结合得过于紧密。每个对象不但要知道它需要记日志、进行安全控制和参与事务,还要亲自执行这些服务。

AOP能够使这些服务模块化,并以声明的方式将它们应用到它们需要影响的组件中去。所造成的结果就是这些组件会具有更高的内聚性并且会更加关注自身的业务,完全不需要了解涉及系统服务所带来的复杂性。总之,AOP能够确保POJO的简单性。

可以将切面想象为覆盖在很多组件之上的一个外壳。借助AOP,可以使用各种功能区包裹核心业务层。可以将安全、事务和日志关注点与核心业务逻辑相分离。


3.使用模板消除样板式代码

样板式代码:重复写类似代码,例如使用JDBC访问数据库查询数据(大部分操作都是雷同的)。JMS、JNDI和使用REST服务通常也涉及大量的重复代码。

Spring旨在通过模板封装来消除样板式代码。JdbcTemplate使得执行数据库操作时,避免传统的JDBC样板代码。使之仅仅关注于核心的业务逻辑。

4.Spring容器

Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期。

Spring容器并不是只有一个。可以归为两种不同的类型:

  • BeanFactory是最简单的容器,提供基本的DI支持
  • ApplicationContext基于BeanFactory构建,并提供应用框架级别的服务,例如从属性文件解析文本信息以及发布应用事件给监听者

Spring自带了多种类型ApplicationContext:

  • AnnotationConfigApplicationContext
  • AnnotationConfigWebApplicationContext
  • ClassPathXmlApplicationContext
  • FileSystemXmlApplicationContext
  • XmlWebApplicationContext

5.bean的生命周期

6.Spring体系架构

  • Spring核心容器
    管理着Spring应用中bean创建、配置和管理。

  • Spring的AOP模块
    借助于AOP,可以将遍布系统的关注点(例如事务和安全)从它们所应用的对象中解耦出来。

  • 数据访问与集成
    使用JDBC编写代码通常会导致大量的样板式代码。Spring的JDBC和DAo模板抽象了这些样板式代码。另外Spring也提供了ORM模块。

  • Web与远程调用
    MVC模式是一种普遍被接受的构建Web应用的方法,可以帮助用户将界面逻辑与应用逻辑分离。该模块还提供了多种构建与其他应用交互的远程调用方案。

  • Instrumentation
    提供了为JVM添加代理的功能。具体来讲,为Tomcat提供了一个织入代理,能够为Tomcat传递类文件,就像这些文件是被类加载器加载的一样。

  • 测试

7.Spring Protfolio

参考官方主页
包括多个构建于核心Spring框架之上的框架和类库。几乎为每一个领域的Java开发都提供了Spring编程模型。

  • Spring Web Flow——基于Spring MVC
  • Spring Web Service
  • Spring Security
  • Spring Integration
  • Spring Batch
  • Spring Data
  • Spring Social
  • Spring Mobile
  • Spring Boot
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容