Spring实战(第4版)读书笔记记录

我们来看一个老式Java对象POJO的例子:

package com.habuma.spring;

public class HelloWorldBean{

public String sayHelllo(){

return "Hello World";

}

}

DI

spring的一项重要作用就是依赖注入,我们可以DI来装配上面的POJO式代码,来帮助应用对象彼此之间保持松散耦合。

它的意义在于:在实际的应用中,有两个或者两个以上的类组成,它们需要相互协作来完成特定的功能。每个对象负责管理与自己

相互协作的对象(即它所依赖的对象)的引用,这样会导致高度耦合和难以测试代码。

我们来看一个紧耦合的例子:

package com.springinaction.knight;

public class DamselRescuingKnight implements knight{

private RescueDameselQuest quest;

public DamselRescuingKnight(){

this.quest=new RescueDamselQuest();//与RescueDamselQuest紧耦合

}

public void embarkOnQuest(){

quest.embark();

}

}

这样的紧耦合有两个缺点,一方面DamselRescuingKnight与RescueDameselQuest耦合在一起,这样限制了这个骑士的能力。另一方面耦合的代码

难以测试,难以复用和理解。

这时DI可以很好的解决这两个问题,依赖注入会将所依赖的关系自动交给目标对象,而不是让对象自己去获取依赖。我们来看下面的例子:

package com.springinaction.knights;

public class BraveKnight implements Knight{

private Quest quest

public BraveKnight(Quest quest){//Quest被注入进来,BraveKnight没有自行创建探险任务,而是把它作为构造器参数注入,这就是构造器注入。

//这里的任务类型是Quest,这样所有探险任务都实现一个接口,BraveKnight就可以做RescueDamselQuest、SlayDragonQuest等任意Quest的实现。

this.quest=quest;

}

public void embarkOnQuest(){

quest.embark();

}

}

对依赖进行替换最常用的方法就是在测试的时候使用mock实现。测试代码就不详细说明了。

让我们来看如何把特定的探险任务传给骑士:

package com.springination.knights;

import java.io.printStream;

public class SlayDragonQuest implements Quest{

private printstream stream;

public SlayDragonQuest(printstream stream){

this.stream=stream;

}

public void embark(){

stream.println("Embarking on quest to slay the dragon!");

}

}

装配

创建应用组件之间协作的行为我们称为装配。Spring有多种装配bean的方式,采用XML是很常见的一种装配方式。

我们来看下面这个配置文件knights.xml,将BraveKnight、SlayDragonQuest和PrintsStream装配到一起。

<?xml version="1.0" encoding==‘UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns="http://www-instance.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="knight" class="com.springinaction.knights.BraveKnight">

<constructor-arg ref="quest"/>//注入Quest bean

</bean>

<bean id="quest" class="com.springinaction.knights.SlayDragonQuest">

<constructor-arg value="#{T(System).out}"/>

</bean>

</bean>

时间: 2024-10-06 22:34:37

Spring实战(第4版)读书笔记记录的相关文章

Java编程思想第四版读书笔记——第十三章 字符串

Java编程思想第四版读书笔记--第十三章 字符串 字符串的操作是计算机程序设计中最常见的行为. 关键词: StringBuilder ,StringBuffer,toString(),format转换,正则表达式, 1.不可变String String对象时不可变的.每当把String对象作为方法的参数时,都会复制一份引用.(其实就是对函数中参数列表中参数的操作不会影响外面的原参数) 如下: import static net.mindview.util.Print.*; public cla

Spring实战(第4版).pdf - 百度云资源

http://www.supan.vip/spring%E5%AE%9E%E6%88%98 Spring实战(第4版).pdf 关于本书 Spring框架是以简化Java EE应用程序的开发为目标而创建的.同样, 本书是为了帮助读者更容易地使用Spring而编写的.我的目标不是为 读者详细地列出Spring API,而是希望通过现实中的实际示例代码来 为Java EE开发人员展现Spring框架.因为Spring是一个模块化的框 架,所以这本书也是按照这种方式编写的.我们知道并不是所有的开 发人

Spring实战(第4版)pdf

下载地址:网盘下载 Spring实战(第4版)是非常畅销的Spring图书也是国内读者极其熟悉的Spring经典图书之一,Java web开发从入门到精通,了解Java Spring技术内幕. 全球有超过100 000的开发者使用本书来学习Spring中文版累计销售超10万册,畅销经典Spring 技术图书,针对Spring 4 全新升级作者Craig Walls,SpringSource的软件开发人员,也是一位畅销书作者.第3版译者继续翻译新版,品质保障! <Spring实战(第4版)>是经

&lt;NET CLR via c# 第4版&gt; 读书笔记--目录

<NET CLR via c# 第4版>个别章节虽读过多次,但始终没有完整读过这本书.即使看过的那些,时间一长,也忘记了大部分.趁着最近不忙,想把这本书好好读一遍,顺便记下笔记,方便随时查看. 真的只是笔记,因为能力有限,并不能很好地讲解一个知识点,只是把我认为比较重要的地方,划个重点,记录到这里.我所追求的,只是尽量别抄错. 所以,如果没看原书,只看这里的话,会比较晕. 目录: <NET CLR via c# 第4版>笔记 第5章 基元类型.引用类型和值类型 <NET CL

javaScript高程第三版读书笔记

看完dom编程艺术现在准备读进阶版的js高程了 第一章 aa ss 第二章 aa ss

Spring in action(Spring实战) 第四版翻译

第一部分 Spring核心 Spring提供了很多功能,但是所有这些功能的基础是是依赖注入(DI)和面向方面编程(AOP). 第一章 Springing into action 本章包括: Spring的bean容器 探索Spring的核心模块 强大的Spring生态系统 Spring的新特性 现在是java程序员的好时代.在长达20年的发展过程中,java经历了一些好时光,也经历了一些坏时光.尽管有一些粗糙的地方,例如applet,Enterprise javabean(EJB),Java数据

Spring实战 (第3版)——AOP

横切关注点可以被模块化为特殊的类,这些类被称为切面.这样做有两个好处:首先,每个关注点现在都只集中于一处, 而不是分散到多处代码中:其次,服务模块更简洁,因为它们只包含主要关注点(或核心功能)的代码,而次要关注点的代码 被转移到切面中了. Spring对AOP的支持局限于方法拦截. Spring在运行期通知对象. 切点和通知是切面的最基本元素.

C Primer Plus (第6版) 读书笔记_Chapter 1

第 1 章 初识 C 语言 ■ C 的历史和特性 ■ 编写程序的步骤 ■ 编译器和链接器的一些知识 ■ C 标准 1.1  C 语言的起源   1972年,贝尔实验室的 丹尼斯 ? 里奇(Dennis Ritch) 和 肯 ? 汤普逊(Ken Thompson)在开发 UNIX 操作系统 时设计了 C 语言.然而,C 语言不完全是里奇突发奇想而来,他是在 B 语言(汤普逊发明)的基础上进行设计.至于 B 语言的起源,那是另一个故事.C 语言设计的初衷是将其作为程序员使用的一种编程工具,因此,其主

【spring实战第五版遇到的坑】第14章spring.cloud.config.uri和token无效

本文使用的Spring Boot版本为:2.1.4.RELEASE Spring Cloud版本为:Greenwich.SR1 按照书上的做法,在application.yml中配置配置服务器的地址和Vault token相关的配置时,在启动的时候发现这两个配置没有生效,使用的还是默认的配置服务器的地址:http://localhost:8080, token也是空的. 解决办法,在类路径下新建bootstrap.yml或者bootstrap.properties文件,也就是在项目的src/ma