Spring 3.x 读书笔记


第一:如果使用BeanFactory作为Spring Bean的工厂类,则所有的bean都是在第一次使用该Bean的时候实例化
第二:如果使用ApplicationContext作为Spring Bean的工厂类,则又分为以下几种情况:
(1):如果bean的scope是singleton的,并且lazy-init为false(默认是false,所以可以不用设置),
则ApplicationContext启动的时候就实例化该Bean,并且将实例化的Bean放在一个map结构的缓存中,下次再使用该Bean的时候,直接从这个缓存中取
(2):如果bean的scope是singleton的,并且lazy-init为true,则该Bean的实例化是在第一次使用该Bean的时候进行实例化
(3):如果bean的scope是prototype的,则该Bean的实例化是在第一次使用该Bean的时候进行实例化

--------------------------------分割线下为模板回调分离法---------------------------------
8.3spring统一数据访问模板
固定的部分在模板类中已经准备好,而变化的部分通过回调接口开放出来,用于定义具体数据访问和结果返回的操作

我们只需编写好回调接口,并调用模板类进行数据访问就可以。
9.2
spring 中的bean默认为singleton 因为对bean中非线程安全的对象采用了ThreadLocal进行了封装
spring事务管理跟spring dao为不同的持久化实现提供了模板类一样,也提供了事务模板类TransactionTemplate 通过模板类并配合使用事务回调TransactionCallback指定具体的持久化操作就可以通过编程方式实现事务管理,而无需关注资源获取、复用、释放、事务同步和异常处理的操作。
execute() 方法 部分截取 模板类TransactionTemplate extends DefaultTransactionDefinition
TransactionStatus status = this.transactionManager.getTransaction(this);
//this 代表transactionDefinition transactionManager将definition量化为status
Object result = null;
try {
result = action.doInTransaction(status);
//TransactionCallback action 执行事务(用户编写) 事务状态由status定义 执行事务过程如果遇到异常会将status状态改变
}
catch (RuntimeException ex) {
// Transactional code threw application exception -> rollback
rollbackOnException(status, ex);
throw ex;
}
catch (Error err) {
// Transactional code threw error -> rollback
rollbackOnException(status, err);
throw err;
}
this.transactionManager.commit(status);
// 事务执行完毕提交事务,如果事务执行过程遇到异常 status 置为rollbackonly 此时事务回滚 反之提交事务!
return result;
AOP:看得较为粗略
增强 Advice
定位连接点的方位信息(相对方法的位置)
应用于连接点的增强逻辑
其本身就是一个简单的切面 只不过代表的横切连接点是所有目标类的所有方法
切点 Pointcut
#getClassFilter
#getMethodMatcher
通过切点只能定位到某个方法
连接点
由增强和切点确定 表示具体的织入点
ProxyFactory 内部使用的是JDK代理 或 CGLib代理
#setTraget() //配置代理目标类
#addAdvice() //添加增强
StaticMethodMatcherPointcutAdvisor
RegexpMethodPointcutAdvisor
DynamicMethodMatcherPointcutAdvisor 对类进行静态检查 对方法进行静态检查 对方法进行动态检查
ControlFlowPointCut
ComposablePointcut
IntroductionAdvisor 仅有一个ClassFilter
BeanNameAutoProxyCreator 为一组特定配置名的Bean自动创建代理实例
DefaultAdvisorAutoProxyCreator 对容器中的所有Advisor进行扫描 自动将这些切面应用到匹配的Bean中
AnnotationAwareAspectJAutoProxyCreator 为包含AspectJ注解的Bean自动创建代理实例
无需为每一个要被代理的Bean都配置一个ProxyFactoryBean
Spring MVC
<context-param> |
ContextLoaderListener 启动“业务层”的Spring容器(ApplicationContext)
DispacherServlet 默认寻找<servlet-name>-servlet.xml 启动Web层的Spring容器(WebApplicationContext)
web层容器作为业务层容器的子容器 web层容器可以引用业务层容器 反之不可
DispacherServlet
protected void initStrategies(ApplicationContext context){
|
该方法在 WebApplicationContext初始化后自动执行
Spring 3.x 读书笔记的更多相关文章
- 《Spring实战》读书笔记——如何实现自动化装配
加我微信公众号,一起夯实Java基础,向着诗和远方出发吧~ 如果所有的装配工作都交给Spring来自动完成,减少人工的干预,是不是就能减少依赖关系配置带来的麻烦呢?认真做自己的事儿吧,装配交给Spri ...
- 《Spring实战》读书笔记——Spring简介
欢迎大家关注我的微信公众号,共同交流Java相关技术! 使用Spring的目的 Spring是为了解决企业级应用开发的复杂性而创建的,使用Spring可以让简单的JavaBean实现之前只有EJB才能 ...
- spring boot实战读书笔记1
1 覆盖起步依赖引入的传递依赖. 以Spring Boot的Web起步依赖为例,它传递依赖了Jackson JSON库.如果不想使用,可以使用 <exclusions>元素去除Jackso ...
- Spring cloud 实战读书笔记
基础知识 Spring cloud 版本说明 Brixton.SR5 :Brixton 的第5个Release版本 SRX:service releases 简称SRX版本,X版本号 Spring b ...
- Spring In Action读书笔记
第一章 1.Spring採用4种策略减少Java开发复杂度 基于POJO的轻量级和最小侵入性编程 依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模板降低样板式代码 PS:POJ ...
- spring 技术内幕读书笔记1
1 在 java 应用开发中,往往会涉及复杂的对象耦合关系,在 代码中处理这些耦合关系,对代码的维护性和应用扩展性会带来许多不便.通过使用spring 的 IOC 容器,可以对这些耦合关系实现一个文本 ...
- spring源码读书笔记
如果我们在web项目里面使用spring的话,通常会在web.xml里面配置一个listener. <listener> <listener-class> org.spring ...
- Spring in action读书笔记(一) 自动化装配bean
需要引入的ja包 <dependency> <groupId>org.springframework</groupId> <artifactId>spr ...
- (转) Spring读书笔记-----Spring的Bean之配置依赖
前一篇博客介绍了Spring中的Bean的基本概念和作用域(Spring读书笔记-----Spring的Bean之Bean的基本概念),现在介绍Spring Bean的基本配置. 从开始我们知道Jav ...
随机推荐
- 记录-新建一个web应用的过程与曲折
第一步/ 打开eclipse,菜单栏下,File–New–Other-,打开后找到web–Dynamic Web Project,然后单击Next. 解释一下,Dynamic ,动态的,变化的,Dyn ...
- bam文件softclip , hardclip ,markduplicate的探究
测序产生的bam文件,有一些reads在cigar值里显示存在softclip,有一些存在hardclip,究竟softclip和hardclip是怎么判断出来的,还有是怎么标记duplicate ...
- JAVA实用案例之图片水印开发
写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...
- Python 学习系列----第一章:基础知识
1.1 常量-----不能改变它的值 1.2 数 在Python 中数可以分为整数.浮点数和复数. PS:在Python中不用区分'long int'类型.默认的整数类型可以任意长.(译者注:长度应该 ...
- Java 强引用 软引用 弱引用 虚引用详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt393 众所周知,java中是JVM负责内存的分配和回收,这是它的优点(使用方 ...
- 闭锁——CountDownLatch
一.概念 闭锁是一个同步工具类,主要用于等待其他线程活动结束后,再执行后续的操作.例如:在王者荣耀游戏中,需要10名玩家都准备就绪后,游戏才能开始. CountDownLatch是concurrent ...
- Spring事务管理(一)
对于Spring相信很多做web开发的小活动一定不陌生,Spring中我们经常谈到的就是IOC和AOP,但是对于Spring的事务管理,相信大家一定也很感兴趣,今天我们就探讨一下Spring中的事务管 ...
- Spring 对缓存的抽象
Cache vs. Buffer A buffer is used traditionally as an intermediate temporary store for data between ...
- linux下文件和目录
(1)普通文件(regular file):这是最常用的文件类型,这种文件包含了某种形式的数据,文件内容的解释由处理该文件的应用程序进行. (2)目录文件(directory file):这种文件包含 ...
- [转载]在instagram上面如何利用电脑来上传图片
原文地址:在instagram上面如何利用电脑来上传图片作者:小北的梦呓 我们都知道instagram是一个手机版的app,instagram官方不支持通过电脑来上传图片,而利用手机又很麻烦,那么如果 ...