第一:如果使用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>
<param-name>contextConfigLocation</param-name>
<!--&lt;!&ndash;<param-value>classpath:applicationContext.xml</param-value>&ndash;&gt;
类路径的方式 下面为文件系统绝对路径的方式 -->
<param-value>file:/Users/luyu/Luyu/javaweb/src/main/resources/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <servlet>
<servlet-name>fbJavaWeb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>fbJavaWeb</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

ContextLoaderListener 启动“业务层”的Spring容器(ApplicationContext)

DispacherServlet 默认寻找<servlet-name>-servlet.xml 启动Web层的Spring容器(WebApplicationContext)

web层容器作为业务层容器的子容器 web层容器可以引用业务层容器 反之不可

DispacherServlet

protected void initStrategies(ApplicationContext context){
//初始化:上传文件解析器、本地解析器、主题解析器、处理器解析器、处理器适配器、处理器异常解析器、请求到视图名翻译器、视图解析器
}

该方法在 WebApplicationContext初始化后自动执行

Spring 3.x 读书笔记的更多相关文章

  1. 《Spring实战》读书笔记——如何实现自动化装配

    加我微信公众号,一起夯实Java基础,向着诗和远方出发吧~ 如果所有的装配工作都交给Spring来自动完成,减少人工的干预,是不是就能减少依赖关系配置带来的麻烦呢?认真做自己的事儿吧,装配交给Spri ...

  2. 《Spring实战》读书笔记——Spring简介

    欢迎大家关注我的微信公众号,共同交流Java相关技术! 使用Spring的目的 Spring是为了解决企业级应用开发的复杂性而创建的,使用Spring可以让简单的JavaBean实现之前只有EJB才能 ...

  3. spring boot实战读书笔记1

    1 覆盖起步依赖引入的传递依赖. 以Spring Boot的Web起步依赖为例,它传递依赖了Jackson JSON库.如果不想使用,可以使用 <exclusions>元素去除Jackso ...

  4. Spring cloud 实战读书笔记

    基础知识 Spring cloud 版本说明 Brixton.SR5 :Brixton 的第5个Release版本 SRX:service releases 简称SRX版本,X版本号 Spring b ...

  5. Spring In Action读书笔记

    第一章 1.Spring採用4种策略减少Java开发复杂度 基于POJO的轻量级和最小侵入性编程 依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模板降低样板式代码 PS:POJ ...

  6. spring 技术内幕读书笔记1

    1 在 java 应用开发中,往往会涉及复杂的对象耦合关系,在 代码中处理这些耦合关系,对代码的维护性和应用扩展性会带来许多不便.通过使用spring 的 IOC 容器,可以对这些耦合关系实现一个文本 ...

  7. spring源码读书笔记

    如果我们在web项目里面使用spring的话,通常会在web.xml里面配置一个listener. <listener> <listener-class> org.spring ...

  8. Spring in action读书笔记(一) 自动化装配bean

    需要引入的ja包 <dependency> <groupId>org.springframework</groupId> <artifactId>spr ...

  9. (转) Spring读书笔记-----Spring的Bean之配置依赖

    前一篇博客介绍了Spring中的Bean的基本概念和作用域(Spring读书笔记-----Spring的Bean之Bean的基本概念),现在介绍Spring Bean的基本配置. 从开始我们知道Jav ...

随机推荐

  1. mongodb菜鸟整理 2 C#Driver使用

    一下载 从官网上下载... 二 引用 下载完了将其解压到某个文件夹内,打开vs建立一个工程 右键引用,找到刚才解压的目录,把里面说有的dll文件全部添加就好 三 命名空间 我都是先打然后alt+shi ...

  2. c#实现服务端webSocket

    现阶段socket通信使用TCP.UDP协议,其中TCP协议相对来说比较安全稳定!本文也是来讲解TCP为主(恕在下学艺不精). 下面是个人理解的tcp/ip进行通讯之间的三次握手! 1.客户端先发送报 ...

  3. Windows下mysql忘记root密码

    1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令: net stop mysql 打开第一个cmd窗口,切换到mysql的bin目录,运行命令: mysql ...

  4. 浅述 Java 并发

    浅述 Java 并发 volatile volatile只能保证变量对各个线程的可见性,但不能保证原子性.关于 Java语言 volatile 的使用方法就不多说了,我的建议是 除了 配合packag ...

  5. MySQL(五)DDL(数据定义语言)

    SHOW CREATE TABLE 表名\G前言 前面在数据库的讲解中,其实很多东西都非常的细节,在以前的学习过程中我都是没有注意到的.可能在以后的工作中会碰到所以都是做了记录的. 接下来,我将分享的 ...

  6. 将git commit的默认编辑器从nano转为vim

    修改系统的配置 git config --global core.editor vim 针对 git 项目修改 .git/config core 中添加 editor=vim

  7. Apache Camel之FTP组件学习

    写在最前面 哎,最近提了离职,手头的活也基本上清理的差不多了.想着这个把月可以舒服的晃悠晃悠的离开,但是运维的小伙伴总是不架势,走之前还是提了个新需求. 先说下需求吧,我们的系统概括的讲就是一个接口系 ...

  8. Topshelf便捷创建Windows服务

    结合Quartz.net学习,前提已经创建了一个定时任务,可见 <定时调度框架:Quartz.net> (基于配置文件形式) 首先引用Topshelf.dll 自定义服务TestServi ...

  9. Java基础学习——泛型

    一.泛型方法 /** 自定义泛型:自定义泛型可以理解为是一个数据类型的占位符,或者理解为是一个数据类型的变量. 泛型方法: 泛型方法的自定义格式:修饰符<声明自定义泛型>返回值类型 函数名 ...

  10. makefile中":=","=","?=","+=" 之间的区别

    区别:  := 有关位置的等于,值取决于当时位置的值 = 无关位置的等于,值永远等于最后的值 ?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 '=':无关位置的等于 比如: x = ...