《 Spring 实战 》(第4版) 读书笔记 (未完结,更新中...)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

Pxx  表示在书的第 xx 页。

Spring 框架的核心是 Spring 容器。

1. (P7.) 构造器注入是依赖注入的方式之一。

紧耦合:在 A 类的无参构造器中直接 new 出一个 B 类。

Spring 松耦合:在 A 类中使用有参构造器,把 B 类的超类类型 X 作为构造参数传入。

这样不需要 A 类管理 B 类,并且可以根据不同情况传入不同的实际参数,只是 X 的子类就可以注入到 A 中使用。A

2. (P15) .A 类中有一个 x 方法,B 类有 y ,z 方法。在 x 方法执行前后分别执行 y,z 方法要显示的写出调用代码 。

Spring aop :把 A 类声明为一个切面。把 A 声明为一个 bean , 定义切入点 ( 包含 x 方法 ) ,分别配置 y,z 为前置、后置通知。这样 A 类完全不知情时就已经调用执行 B 类的对应方法了。

3. (P34.) 装配 (wiring):创建应用对象之间协作关系的行为,这也是依赖注入(DI)的本质。

Spring 有三种主要装配机制:在 xml 中进行显示配置、在 java 中进行显示配制、隐式的 bean 发现机制和自动装配。

Spring  从两个角度来实现自动化装配 :组件扫描 (component scanning)- Spring 会自动发现应用上下文中所创建的 bean 。
自动装配 (autowiring) - Spring 自动满足 bean 之间的依赖。

4. (P37.)  扫描包的方式:

1)@ComponentScan 默认会扫描与配置类相同包的类。

2)指定扫描包: @ComponentScan(basePackages="单个类名")、 @ComponentScan(basePackages={“第一个包名”,“第N个包名”}) 、@ComponentScan(basePackagesClasses={A.class,B.class}) 

最后一种方式利于重构代码,A 、B 类是接口类型的话,改变实现类的类名,在扫描包时不受影响。

5. (P38.) 

import static org.junit.Assert.*; 导入此类,可以调用方法 assertNotNull(要检查的对象);   来检查对象是否为 null 。

6 . (P38.) Spring 应用上下文中所有的 bean 都会给写一个 ID , 这个 bean 所给写的 ID 为类名的第一个字母变小写。

可以显示的给 bean 命名,有 2 种方式 :@Compnent ("这个位置写名字") 、@Named ("这个位置写名字") 。

---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- 创建于 2018.11.10 

7 . (P41.) 注解 @Autowired  可用在构造方法上,属性的 Setter 方法上,以及任何方法上。当有且仅有一个 bean 匹配依赖需求,就会装配起来。当没有匹配时会抛出异常。此时可设置 @Autowired 的属性 required 为 false :@Autowired(required = false),不作检查,但这样没有匹配到 bean ,则 bean 处于未装配状态,如果代码也未作 null 检查,可能会出现 NPE(空指针异常)。

@Autowired 可用@Inject 代替。

8 . (P44.)  JavaConfig 是配置代码,不包含任何业务逻辑,应当单独放到一个包中。

9 . (P45.)  @Bean 会告诉 Spring  这个方法将会返回一个对象,该对象要注册为 Spring 应用上下文中的 bean 。bean 的 ID 与带有 @Bean 注解的方法名是一样的。设置不同名字可以重命名方法名,也可以通过 name 属性指定不同的名字:@Bean(name = "新名字") 。

10 . (P48.)  可用 Spring  Tool  Suite 创建 XML 配置文件,并可选择对应的命名空间。

11 . (P49.)  XML 中的 <bean> 类似于 JavaConfig 中的 @Bean 。 <bean class = "此处要写全限定名(全类路径)"> 。

Spring 发现 <bean> 默认调用构造器创建 bean。

12 . (P56.)  装配通用规则:对于强依赖使用构造器注入,对于可选性的依赖使用属性注入。

在 XML 中,<property> 对应属性的 Setter 方法,<constructor-arg> 对应类的构造器。

13 . (P62.)  导入其它配置

---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- 更新于 2018.11.11

14. (P62.)  @Profile(“dev”) 注解指定 bean 属于哪一个 profile 。当注解应用配置在类级别上时,表示Spring 这个配置类中的 bean只有在 dev profile 激活时才会创建。若 dev profile 没有激活,那么带有@Bean 注解的方法都会被忽略掉。

Spring 确定哪个 profile 处于激活状态,依赖两个独立的属性:spring.profiles.active 和 spring.profiles.default 。可以有多种配置方式来设置这两个属性:1)作为 DispatcherServlet 的初始化参数。2)作为 web 应用上下文参数。3)作为 JNDI 条目。4)作为环境变量。5)作为 JVM 的系统属性。6)在集成测试类上,使用 @ActiveProfiles 注解设置。

15. (P75.)  只有满足某种条件才创建 bean ,即条件化,使用注解: @Conditional ( Xxx.class ) 。xxx可以传一个任意的实现了Conditon 接口的实现类。

16. (P80.)  当只有一个 bean 匹配时,Spring 会自动装配。多个 bean匹配时,确定首选 bean 的方式 :

@Primary + @Component 组合,或者 @Bean + @Component 组合,多个 bean匹配时,可以确定优先选择对象。

XML 中可以配置 :

 <bean id="xxx" class ="xxxx" primary ="true" > 来确定首选 bean 。

17. (P81.)  指定注入 bean 方式: @Autowired + @Qualifier(" 要注入的 bean 的ID ") 。这种方式是和类名紧耦合的。

可以用自定义限定符注解 :在一个类 A 上加上注解 @Qualifier("cold") 假定表示这个类有 cold 特性。

同时把 bean  交给 Spring 管理,于是在 A 类上就有2个注解 :@Component + @Qualifier("这个位置是特性,可任意填写") 或者:@Bean + @Qualifier("特性描述") 。

当有多个特性时是不能把 @Qualifier 写多次的,会编译报错。这时就用处定义注解:public @interface Cold( ) ... public @interface Red( ) ... 等。

当在方法上、类上要注入对应特性 bean 时注解写为:@Component + @Cold + @Red ,组合起来使用就行了。

18. (P84.) Sprng 应用上下文中的所有 bean 都是单例的,不论注入多少次,每次注入的都是同一个 bean。

指定作用域来创建 bean 使用注解:@Scope("prototype") 表示该 bean  作用域类型为 原型类型。可用常量代替“prototype” ,且常量更安全。

可以基于作用域来创建 bean :1.单例(Singleton):在整个应用中,只创建一个实例。2.原型(Prototype):每次注入或者通过 Spring 应用上下文获取的时候,都会创建一个新的 bean 实例。3.会话(Session):在 web 应用中,为每个会话创建一个 bean 实例。4.请求(Request):在 web 应用中,为每个请求创建一个 bean 实例。

可以在 XML 中配置为:

<bean id ="xxx" class="xxx" scope="prototype">  表示作用域类型为:原型类型

 应用场景如:购物车则把作用域设置为:会话类型。

其实,注入的并不是真正的 bean ,而是一代理对象,代理对象会报露出与原 bean 相同的方法,当service 真正调用该方法时,代理会对其进行懒解析,并将调用委托给会话作用域内真正的 bean。

19. (P89.) Spring 提供了两种在运行时求值的方式:属性占位符(Property placeholder)、Spring 表达式语言 (SpEL)。

注入外部值可以用 Spring Environment 来检索属性。

20. (P103.) Spring 切面有 5 种类型:

1.前置通知(Before):在目标方法被调用前 调用通知功能。2.后置通知(After):在目标方法完成之后 调用通知,此时不关心方法的输出是什么。3.返回通知(After-returnning):在目标方法成功执行之后 调用通知。4.异常通知(After-throwing):在目标方法抛出异常后 调用通知。5.环绕通知(Around):通知包裹了被通知的方法,在被通知方法调用之前和调用之后执行的自定义行为。

21. (P105.) Spring 提供了 4 种类型的 AOP 支持:

1.基于代理的经典 Spring AOP。2.纯 POJO 切面。3.@AspectJ 注解驱动切面。4.注入式 Aspect 切面 (适用于 Spring 各个版本)。

22. (P106.) Spring 的切面由包裹了目标对象的代理类实现。代理类处理方法的调用,执行额外的切面逻辑,并调用目标方法。

23. (P110.)  注解 @Aspect 用于定义切面。

切点定义方式:

@Pointcut(“execution( ** xxx.xxx.xxx.类名.方法名(..))”)  

也可以把以上这一行注解给在一个空参 void 方法 A 上。在其它方法上通知注解的切点写法为:@Before( "A" ),表示 这个前置通知的切点同于 A 方法的切点。

---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- 更新于 2018.11.16

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构排序法之希尔排序法(Shell Sort)

希尔排序&#xff0c;也叫递减增量排序&#xff0c;是插入排序的一种更高效的改进版本。希尔排序是不稳定的排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的&#xff1a; 1、插入排序在对几乎已经排好序的数据操作时&#xff0c;效率高&#xff0c;即可以达…

Windows To Ghost系统封装之必备软件集 - 好压

好压压缩软件&#xff08;HaoZip&#xff09;是强大的压缩文件管理器&#xff0c;是完全免费的新一代压缩软件&#xff0c;相比其它压缩软件系统资源占用更少&#xff0c;有更好的兼容性&#xff0c;压缩率比较高。 它提供了对ZIP、7Z和TAR文件的完整支持&#xff0c;能解压RAR…

js 弹窗并定时关闭

1. $(input).click(function() {prompt(点击成功, 2000) })function prompt(newName, time, fn) {var $div $(<div></div>);$div.css({position: fixed,top: 0,left: 0,width: 100%,height: 100%,z-index: 200,background-color: rgba(0,0,0,0.4),// background-c…

数据结构排序法之插入法

插入排序是一种简单直观的排序算法。它的工作原理非常类似于我们抓扑克牌。 对于未排序数据(右手抓到的牌)&#xff0c;在已排序序列(左手已经排好序的手牌)中从后向前扫描&#xff0c;找到相应位置并插入。 插入排序在实现上&#xff0c;通常采用in-place排序&#xff08;即…

XSLT学习笔记

1. 样式声明&#xff1a;<xsl:stylesheet>或<xsl:transform> 2. XSLT常用元素&#xff1a; 2.1 <xsl:template>&#xff1a;创建模板 Match属性的作用是使模板和XML元素相关联 e.g.:<xsl:template match"\">......</xsl:template&g…

职场:人生从没有最佳时机!一个离职客服人员的领悟

每个人都有感到失落迷惘的时候。 人生用专制又霸道的方式运行着&#xff0c;每当我们心想一切尘埃落定、生活稳固的时候&#xff0c;生活总爱给我们惊喜&#xff0c;粉碎我们短暂的安逸&#xff0c;让我们不得不重新思考。 「我走对路了吗?」 「我能够赚更多钱、爬到更高的地位…

VS Code 的常用快捷键

VS Code 的常用快捷键和插件 一、vs code 的常用快捷键 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、注释&#xff1a; a) 单行注释&#xff1a;[ctrlk,ctrlc] 或 ctrl/ b) 取消…

vue-axios interceptors

import axios from axios import cookie from js-cookie const options {baseURL: window.location.protocol process.env.BASE_API,headers: {},timeout: 20000 } const fetch axios.create(options)// request拦截器 fetch.interceptors.request.use(config > {if (coo…

数据结构排序法之鸡尾酒排序法he快速排序法

鸡尾酒排序&#xff0c;也叫定向冒泡排序&#xff0c;是冒泡排序的一种改进。此算法与冒泡排序的不同处在于从低到高然后从高到低&#xff0c;而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能。 // 两两互换 void swap (int* a, int i, …

VSCode 多开、环境对比

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 多开&#xff1a; 第一种&#xff1a;win10的开始菜单&#xff0c;在vscode图标右键选择“新开窗口”&#xff0c;这样就多了一个vscode…

前言_工作两年自我感触

17年大学毕业&#xff0c;到今天整整工作两年&#xff0c;从前端到数据分析&#xff0c;从上家公司&#xff08;简称A&#xff09;到现公司&#xff0c;想趁着今天是参加工作两年的纪念日&#xff0c;回忆过往&#xff0c;结合现状有感而发。 刚毕业的时候&#xff0c;啥都学&a…

数据结构排序法之堆排序he归并排序

堆排序&#xff08;Heapsort&#xff09;是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构&#xff0c;并同时满足堆性质&#xff1a;即子结点的键值或索引总是小于&#xff08;或者大于&#xff09;它的父节点。 堆排序的时间&#xff0c;主要由建…

超详细设置 Idea 类注释模板和方法注释模板

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 网上找了一下&#xff0c;没有很详细且正确介绍Idea配置注释模板的&#xff0c;于是结合多篇文章自己琢磨整理出如下。 设置类注释模板…

手动创建两个文本文件text1.txt和text2.txt,按要求创建text3.txt

实现在text1.txt和text2.txt文件中除去首行和末尾对应的数据&#xff0c;要求三个文本内容如下&#xff1a; text1 text2 text3begin begin begin10 11 12 15 16 17 …

感情

团结 共患难的感情转载于:https://www.cnblogs.com/yyjh/p/11139749.html

谁抢走了中国男人的老婆?

“老夫少妻”、“包二奶”、“洋媳妇”、“单身贵族”、“丁克家庭”都是当今最时髦的词汇。这看似“你情我愿”的现象背后竟隐藏着巨大隐患! 目前中国男女比例是119&#xff1a;100&#xff0c;某些地区已达130&#xff1a;100;中国将有5百万以上光棍&#xff0c;这对中国社会…

latex 幻灯片演示模板

http://zzg34b.w3.c361.com/templet/slide.htm转载于:https://www.cnblogs.com/binterminator/articles/1621647.html

Linux 文件系统编程之系统调用和标准I/O库

系统调用 访问设备驱动程序的底层函数主要有&#xff1a; open:打开文件或者设备。 read:从打开的文件或者设备里面读取数据。 write:向文件或者设备写数据。 close:关闭文件或者设备。 open系统调用&#xff1a; #include <fcntl.h> #include <sys/types.h> #in…

mysql 索引:类型 、创建

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一个简单的对比测试 以我去年测试的数据作为一个简单示例&#xff0c;20多条数据源随机生成200万条数据&#xff0c;平均每条数据源都重…

水调歌头·中秋

转载于:https://www.cnblogs.com/divineka/archive/2004/09/04/39560.html