Spring实战读书笔记
Spring实战读书笔记
Spring-core
Spring之旅 - DI 和 AOP 概念
- spring 的Bean容器
- spring 的 核心模块
Spring的核心策略
- POJO 最小侵入式编程
Spring不会强迫你实现接口或者继承类,通过DI来装配POJO类型。- 采用依赖注入和面向接口实现松耦合
依赖反转容器(IOC):将整体设计和局部实现之间的依赖关系反转,比如汽车厂设计汽车:如果先设计轮子,再根据轮子设计底盘,再根据底盘设计汽车,在我们更换轮子的时候就会由于轮子和底盘之间依赖关系带来很多不便,我们让轮子去依赖汽车,这就是依赖反转。依赖反转容器就是用来实现依赖反转的代码实现。
依赖注入(DI):是一种实现依赖反转的方式,将类内成员的属性通过注入的方式获得,这样就将 类成员的初始化 和销毁的职责全部交给了外部去实现,而且还可以抽象出接口。- 切面和模板减少样板式代码 实现声明式编程
面向切面编程(AOP):面向切面编程可以把功能分离出来形成单独的组件,比如日志,事务管理等系统服务在业务逻辑中的分散容易形成混乱(即使抽象为模块函数也会有函数的调用),AOP能够让这些服务模块化 用声明的方式来应用到它们需要影响的组件中,通过动态代理 根本 无需知道这些类的存在。
容纳你的Bean
在基于spring的应用中,容器负责创建对象,配置对象和销毁对象。
Bean工厂提供简单的DI支持
应用上下文提供应用框架级别的服务
Bean的生命周期
装配Bean - 拼装应用组件
- 声明Bean
- 构造器注入 和 Setter注入
- 装配Bean
- 控制Bean的创建和销毁
Spring 配置的可选方案
- 在XML中进行显式配置(了解)
- 在Java中显式配置(了解)
- Bean发现和自动装配
Spring通过组件扫描 和autowiring 实现自动化装配创建可被发现的Bean
首先通过接口建立功能上的抽象,创建接口的一个实现并添加注解(Spring会为这个类创建Bean)。通过@ComponentScan来启用扫描。为组件扫描的Bean命名
Spring应用上下文中的bean都会有一个ID,如果没有指定就会是类名的第一个字符变为小写,可通过@Named来指定命名。通过为Bean添加注解实现自动装配
@AutoWired注解不仅仅可以使用在构造器上,还能用在属性的Setter方法上,如果不是必须的匹配,那么可以将required 设置为false。多个Bean可以满足条件的话将会报错。
高级装配
- Spring profile
- 条件化的Bean声明
- 自动装配和歧义性
- Bean的作用域
- Spring表达式语言
环境与profile
通过配置profile bean 来实现,要使用profile 首先要将不同的bean整理到一个或者多个profile中,部署的时候确定对应的profile处于active 的状态。配置profile bean。激活profile bean。
条件化的bean (了解 @Condition)
处理自动化装配歧义性
在多个@Bean 满足条件的情况下会抛出异常,此时应该使用@Primary来标识首选的@Bean。
使用限定符限制可以选择范围。@Qualifier来指定符合条件的bean-id。
Bean作用域
默认情况下所有的bean都是单例注入的,Spring定义了多种作用域
使用@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
>* Singleton
>* Prototype 每次注入或者获取都会获得一个新的实例
>* Session 每个会话创建一个bean实例
> 使用proxyMode(作用域代理)来生成代理 实现懒加载 并且 注入真正会话对应的 Bean
>* Request 在Web应用中每个请求创建一个实例
使用XML配置作用域(了解)
运行时值注入
属性占位符 和 SqEL。
- 注入外部的值
使用@PropertySource 注解属性来源{...} SqEL 表达式
${...} 属性占位符
面向切面 - 如何使用AOP解耦
软件开发中很多应用被称为横切关注点,AOP实现横切关注点和业务逻辑代码的分离。
什么是面向切面编程
切面实现了横切关注点的模块化,使得每个关注点都集中在一个地方,其次,服务模块只包含核心功能代码,次要代码被转移到切面中。
AOP术语
- advice 切面的工作
前置
后置 不能访问执行结果
返回
异常
环绕
- pointcut 通知定义了切面的“什么”和“何时”的话,那么切点就定义了“何处”
- joinpoint 连接点是在应用执行过程中能够插入切面的一个点,调用切点的时机。
- Spring对AOP的支持
基于代理的经典Spring AOP;
纯POJO切面;
@AspectJ注解驱动的切面;
注入式AspectJ切面(适用于Spring各版本)
通过代理类封装目标类,拦截调用目标类的消息。直到真正需要被代理的bean的时候,Spring才创建代理对象。
通过切点来选择连接点
- 编写切点:
当concert包下的Performance接口被调用
execution(* concert.Performance.perform(..))
可以使用&& 和 ||- 在切点中选择bean
bean()可以使用 bean 的id 或者 name 来限制切点只匹配特定的bean。
使用注解创建切面
- 定义切面
对类使用@AsspectJ 进行标注,表示Audience不仅仅是一个POJO ,还是一个切面
通过特定的注解来指定连接点
可以通过@Pointcut 来指定经常使用的连接点
启用自动代理- 创建环绕通知
环绕通知可以将整个方法完全包装,相当于在一个通知方法中同时编写前置后置通知。
通过ProceedingJointPoint 来调用方法,甚至可以直接屏蔽掉方法。
@Aspect
public class Audience{
@Pointcut("execution(* concert.Performance.perform(..))")
public void performance(){}
@Around("performance()")
public void watchPerformance(ProceedingJoinPoint jp){
try{
System.out.println("Silencing cell phones");
jp.proceed();
System.out.println("CLAP");
}
catch(Throwable e){
System.out.println("Demanding a refund");
}
}
}
- 处理通知中的参数
args限定符表明传递给 连接点的 方法也会传递到通知中去。
@PointCut("performacne()" + "&& args(trackNumber)")
public void trackPlayed(int trackNumber);
通过注解添加新的功能
- 基于动态代理暴露新的功能
给所有类添加一个新的接口
借助AOP的引入,不必侵入式实现,可以用@DeclareParents
在XML中声明切面(了解)
Spring实战读书笔记的更多相关文章
- <<Java RESTful Web Service实战>> 读书笔记
<<Java RESTful Web Service实战>> 读书笔记 第一章 JAX-RS2.0入门 REST (Representational State ransf ...
- 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...
- 机器学习实战 - 读书笔记(12) - 使用FP-growth算法来高效发现频繁项集
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第12章 - 使用FP-growth算法来高效发现频繁项集. 基本概念 FP-growt ...
- 机器学习实战 - 读书笔记(11) - 使用Apriori算法进行关联分析
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第11章 - 使用Apriori算法进行关联分析. 基本概念 关联分析(associat ...
- 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...
- iPhone与iPad开发实战读书笔记
iPhone开发一些读书笔记 手机应用分类1.教育工具2.生活工具3.社交应用4.定位工具5.游戏6.报纸和杂志的阅读器7.移动办公应用8.财经工具9.手机购物应用10.风景区相关应用11.旅游相关的 ...
- Spring揭秘 读书笔记 三 bean的scope与FactoryBean
本书可作为王富强所著<<Spring揭秘>>一书的读书笔记 第四章 BeanFactory的xml之旅 bean的scope scope有时被翻译为"作用域&quo ...
- spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Pr ...
- spring揭秘 读书笔记 一 IoC初探
本文是王福强所著<<spring揭秘>>一书的读书笔记 ioc的基本概念 一个例子 我们看下面这个类,getAndPersistNews方法干了四件事 1 通过newsList ...
随机推荐
- asp.net网站接入QQ登录
这两天在做网站第三方登录,总结一下QQ登录吧,支付宝就不用了(下载dome把ID什么的换一换就基本可以了.),本文主要说的是代码的实现方式,逻辑部分主要还是根据帮助文档来的.不懂的同学可以先看看文档. ...
- 外文翻译 《How we decide》赛场上的四分卫 第三节
本书导言翻译 本章第二节 1982年,一位名叫Elliot的病人走进了神经科学家Antonio Damasio的办公室.几个月之前,一个小的肿瘤在它的大脑中被切除,切除点与大脑额叶非常靠近.在手术之前 ...
- Spring数据访问2 - 通过JDBC访问数据库
因为原生的jdbc操作太复杂,几乎都是建立连接.关闭连接和处理例外等模板式的代码,Spring对此进行了抽象——使用模板来消除样板式代码 ,JdbcTemplate承担了简化数据库访问这块的任务. 利 ...
- H.264学习笔记2——帧内预测
帧内预测:根据经过反量化和反变换(没有进行去块效应)之后的同一条带内的块进行预测. A.4x4亮度块预测: 用到的像素和预测方向如图: a~f是4x4块中要预测的像素值,A~Q是临块中解码后的参考值. ...
- asp.net 实现treeview 选中父节点其子节点也选种中 选中子节点其父节点与根节点也被选中
1.在 Page_Load(object sender, EventArgs e) 里面加入: TreeView1.Attributes.Add("onclick", " ...
- Android(java)学习笔记203:JNI之NDK开发步骤
1. NDK开发步骤(回忆一下HelloWorld案例): (1)创建工程 (2)定义native方法 (3)创建jni文件夹 (4)创建c源文件放到jni文件夹 (5)拷贝jni.h头文件到jni目 ...
- Perl字符集就是方括号(或称中括号)里一连串可能的字符,只匹配单一字符,该单一字符可以是字符集里的任何一个,“-”在字符集里有特殊含义:表示某个范围的字符。而字符集意外的连字符不具有特殊意义。
Perl字符集就是方括号(或称中括号)里一连串可能的字符,只匹配单一字符,该单一字符可以是字符集里的任何一个,“-”在字符集里有特殊含义:表示某个范围的字符.而字符集意外的连字符不具有特殊意义.
- Windows下如何使用CMD命令进入MySQL数据库
1.打开[开始]>[运行]输入[cmd]单击[确定]后出现CMD命令黑色窗口,这就是我们说的CMD命令行,或者使用快捷键Windows键(在键盘上有个Windows标志的按键)+R输入cmd后回 ...
- Android之多种Bitmap效果(4)
1. 将图片变为圆角 2. 获取缩略图图片 3. LOMO特效 4. 旧时光特效 5. 暖意特效 6. 根据饱和度.色相.亮度调整图片 7. 添加图片外边框 8. 添加内边框 9. 创建一个缩放的图片 ...
- Linux从入门到适应(四):Ubuntu 16.04环境下,安装Nvidia驱动,cuda9.2和 cudnn
在安装深度学习框架之前,cuda和cudnn是必须要提前安装的,现在按照流程而nvidia驱动的版本和cuda版本有这一些对应关系,所以需要按照版本进行安装,现在说一下如何安装: 1 安装nvidia ...