Spring实战第一部分总结

第一章 综述

1.
DI依赖注入让相互协作的组件保持松散耦合,而面向切面编程允许你把遍布应用各处的功能分离出来形成可重用的组件。

2.Spring容器负责创建并管理对象(单例),配置并管理他们的整个生命周期

3.spring中的bean的生命周期:实例化—填充属性—调用setBeanName方法—调用setBeanFactory方法—调用setApplicationContext方法—调用BeanPostProcessor预初始化方法—调用afterpropertiesSet方法—调用自定义的初始化方法--
调用BeanPostProcessor初始化后方法—bean可以使用了—容器关闭时调用Disposablebean的destroy方法—调用自定义的销毁方法。

第二章
装配
Bean

核心内容:声明bean,构造器注入和set方法注入,装配bean,控制bean的创建和销毁。

1.spring配置方案:XML中显式配置;Java中进行显式配置;隐式的bean发现机制和自动装备。
推荐指数依次升高。

2.自动化装配Bean:(1)组件扫描(component
scanning)spring会自动发现应用上下文中所创建的bean。(2)自动装配(autowiring):spring自动满足bean之间的依赖。

3.将一个bean用@component标注,然后在同一个包写一个JavaConfig类,用@Configuration和@componentscan(自动扫描)标注;Spring就会自动扫描位于javaconfig包下的带有@component标签的bean。

XML中自动扫描启动方式为:<context:component-scan
base-package=”soundSystem”/>

4.标记bean
@Named = @Component ;装配bean
@Inject = @Autowired

标记bean直接在类头上添加注释即可。装配bean可以在定义的类属性上,构造方法上,set方法上直接添加@Autowired(@Inject)注释,直接完成bean的装配。

5.在JavaConfig类中也可以用@Bean注释来声明应用上下文中的Bean,这里会写一个方法,方法返回类型为定义的bean。在javaconfig中装配bean最常用的方法就是引用创建bean的方法。如:

@Bean

public
Cdplayer cdPlayer(){retrun new CDPlayer(sgtPeppers()); }

6.XML声明bean
<bean id = “compactDisc” class = “soundsystem.sgtPepers”/>

注入bean:<bean
id = “cdPlayer” class = “soundsystem.CDPlayer”>

<constructor-arg
ref = “compactDisc”/> 注入bean

<constructor-arg
value = “she is a really boy”/> 注入属性

</bean>

7.
对于强依赖
采用构造器注入,弱依赖采用属性注入。

第三章
高级装配

1.高级装配中的歧义性,使用@Qualifier注解。

2.Spring定义了多种作用域:单例;原型:每次注入或获取时都会创建一个bean实例;会话:在web中为每个会话建立一个bean实例;请求:同会话

3.运行时求值有两种方法,一是属性占位符,一是Spring表达式

属性占位符:声明属性源(@propertySource(”路径”)),并通过Spring的Enviroment对象来检索属性。如果是自动扫描,则可以用@Value(${disc.title}).

4.
spring表达式SpEL需要放入#{...}中。

第四章
面向切面

切面帮助我们模块化横切关注点。在面向切面编程时,我们可以在一个地方定义通用功能,但是可以通过声明的方式定义这个功能要在何处应用,而无需修改受影响的类。

1.
切面也有目标,他必须完成的工作,切面的工作被称之为通知

Spring有五种通知,前置,后置,返回,异常,环绕。

2.连接点:应用通知的时机被称为连接点。

3.切点:切点有助于缩小切面所通知的连接点的范围。

4.切面:切面是通知和切点的结合,通知和切点反映出—它是在何时何处完成其功能的。

5.Spring提供四种aop支持:基于代理的经典Spring
AOP;纯pojo切面;@AspectJ注解驱动的切面;注入式AspectJ切面。

6.@pointcut可定义 重用的切点, 先用@aspect 标注audience类,声明为切面。然后:

@pointcut(“execution(** concert.Performance.perform(..))”)

public void performance() { }

@Before(“performance()”)

public void takeseats( ){ }

7. 使用JavaConfig时,可以在配置类级别上通过使用@EnableAspectJAutoProxy注解启用自动代理功能。6中的切面就可以被实际使用起来。audience类中的通知就会在perform()方法执行的前后执行。

Spring实战第一部分总结的更多相关文章

  1. Spring实战第一章学习笔记

    Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...

  2. spring boot实战(第一篇)第一个案例

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   spring boot实战(第一篇)第一个案例 前言 写在前面的话 一直想将spring boot相关内容写成一个系列的 ...

  3. vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录

    一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...

  4. Spring实战——无需一行xml配置实现自动化注入

    已经想不起来上一次买技术相关的书是什么时候了,一直以来都习惯性的下载一份电子档看看.显然,如果不是基于强烈的需求或强大的动力鞭策下,大部分的书籍也都只是蜻蜓点水,浮光掠影. 就像有位同事说的一样,有些 ...

  5. Spring实战——缓存

    缓存 提到缓存,你能想到什么?一级缓存,二级缓存,web缓存,redis-- 你所能想到的各种包罗万象存在的打着缓存旗号存在的各种技术或者实现,无非都是宣扬缓存技术的优势就是快,无需反复查询等. 当然 ...

  6. 《Spring实战》学习笔记-第五章:构建Spring web应用

    之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. ...

  7. (一)《Spring实战》——Spring核心

    <Spring实战>(第4版) 第一章:Spring之旅 1. 简化Java开发 为了降低Java开发的复杂性,Spring采取了以下4种关键策略: 基于POJO的轻量级和最小侵入性编程: ...

  8. 【Spring实战】Spring注解配置工作原理源码解析

    一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...

  9. Spring实战第八章学习笔记————使用Spring Web Flow

    Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...

随机推荐

  1. 基础数据类型-tuple

    Python中,元组tuple与list类似,不同之处在于tuple的元素不能修改,tuple使用(),list使用[], (1)元组的创建使用(),需要注意的是创建包含一个元素的元组: tuple_ ...

  2. linux下的常用技巧。

    xargs  linux下的多行合并~ [root@]# yum list installed|grep php|awk -F ' ' '{print $1}' php-channel-nrk.noa ...

  3. 第十九次ScrumMeeting会议

    第十九次Scrum Meeting 时间:2017/12/9 地点:三公寓大厅 人员:蔡帜 王子铭 游心 解小锐 王辰昱 李金奇 杨森 陈鑫 赵晓宇 照片: 目前工作进展 名字 今日 明天的工作 蔡帜 ...

  4. 课堂练习之找数字0-N中“1”出现的次数

    一.题目与要求 题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求:1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12) ...

  5. LintCode-211.字符串置换

    字符串置换 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换. 置换的意思是,通过改变顺序可以使得两个字符串相等. 样例 "abc" 为 "cb ...

  6. iOS-明杰解决字段冲突,及数组映射

    /** 替换关键字的属性名 */ + (NSDictionary *)mj_replacedKeyFromPropertyName{ return @{@"UUID":@" ...

  7. 自定义类属性设置及setter、getter方法的内部实现

    属性是可以说是面向对象语言中封装的一个体现,在自定义类中设置属性就相当于定义了一个私有变量.设置器(setter方法)以及访问器(getter方法),其中无论是变量的定义,方法的声明和实现都是系统自动 ...

  8. web前端之路 - 开篇

    一 web发展历程 了解事物的历史有助于我们渐进式的从发展的思路清楚了解事物的来龙去脉. 这里有一篇网文写得比较清晰和完整:https://www.tianmaying.com/tutorial/we ...

  9. 【APS.NET Core】- Json配置文件的读取

    在项目目录下有个 appsettings.json ,我们先来操作这个文件.在appsettings.json中添加以下内容: { "Logging": { "LogLe ...

  10. windows网络模型

    Windows提供了四种异步IO技术,机制几乎时相同的,区别在于通知结果的方式不同: 1.通过注册的消息函数进行通知 2.通过内核event事件进行通知 3.通过称为完成例程的回调函数进行通知 4.通 ...