事务传播行为种类 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 表1事务传播行为类型 事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中.这是最常见的选择. PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行. PROPAGATION_MANDATORY 使…
Spring启动过程源码分析基本概念 本文是通过AnnotationConfigApplicationContext读取配置类来一步一步去了解Spring的启动过程. 在看源码之前,我们要知道某些类的作用,这样更方便后续的了解. 1.BeanDefinition BeanDefinition就是Bean的定义,它是用来描述Bean的,里面存放着关于Bean的一系列信息,比如Bean的作用域,Bean所对应的Class,是否懒加载等等,BeanDfinition与Bean的关系可以看作是类和cla…
什么是webService WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理论资料: http://blog.csdn.net/wooshn/article/details/8069087/ cxf 简单的说就是实现webService的一个比较流行的框架 http://blog.sina.com.cn/s/blog_6182547f01017pak.html 网上现在全是基于spring如何集成cxf,让很多不用spring的同学犯了难,不能为了使用cxf把spring…
应用不用Spring MVC, 采用ErrorPageRegistrar 接口能直接映射errors. 1.概览 2.java代码 1).MyAppServlet package com.ebc.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.…
IoC(Inversion of Control,控制反转).这是spring的核心,贯穿始终, 所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系.Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西.所有的类的创建.销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的…
从前面我们知道spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置. 对于我们而言,我们使用Spring框架所做的就是两件事:开发Bean.配置Bean.对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成"依赖注入". 一.Bean的定义 <beans-/>元素是Spring配置文件的根元素,<bean-/>元素师<b…
从前面我们知道Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置. 对于我们而言,我们使用Spring框架所做的就是两件事:开发Bean.配置Bean.对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”. 一.Bean的定义 <beans…/>元素是Spring配置文件的根元素,<bean…/>元素师<beans../>…
从前面我们知道Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置. 对于我们而言,我们使用Spring框架所做的就是两件事:开发Bean.配置Bean.对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”. 一.Bean的定义 <beans…/>元素是Spring配置文件的根元素,<bean…/>元素师<beans../>…
从前面我们知道Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置. 对于我们而言,我们使用Spring框架所做的就是两件事:开发Bean.配置Bean.对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”. 一.Bean的定义 <beans…/>元素是Spring配置文件的根元素,<bean…/>元素师<beans../>…
AOP:Aspect Oriented Programing的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序程序功能的统一维护的一种技术 主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理... AOP的实现方式: 预编译   ---  AspectJ 运行期动态代理(JDK动态代理,CGLib动态代理)    ----  SpringAOP.JbossAOP AOP几个相关的概念 名称 说明 切面(Aspect) 一个关注点的模块化,这个关注点可能会横切多个对象…
上篇<Spring集成RabbiMQ-Spring AMQP新特性>我们了解了最新spring-rabbit的2.0.0.M5版本相较于之前有哪些变化.其实使用Spring-amqp确实简单,其主要就一些jar包,比如spring-amqp,spring-rabbit等.这篇就通过几个基本概念来了解下Spring amqp和原生amqp在用法上有何不同. 消息体 在<RabbitMQ入门>系列中,我们如果要发送一条消息,都是转成字节数组的,类似这样 channel.basicPub…
一.什么是AOP AOP:也称作面向切面编程 在分享几个概念执行我想先举个栗子(可能例子举得并不是特别恰当): 1.假如路人A走在大街上,被一群坏人绑架了: 2.警察叔叔接到报警迅速展开行动:收集情报,人员组织,准备装备... 3.警察和坏人打了一架,将人质解救出来(在这里我假设人质A受了伤) 4.警察叔叔将人质送往医院治疗 5.警察举行新闻发布会,宣布人质解救成功. 具体流程如下: 但是问题来了,如果哪一天又有人被绑架了,警察叔叔又得通过这一系列流程,有的情况下准备的时间远远大于解救人质所花的…
DI(依赖注入) 和IOC(控制反转)都是一种设计思想,要理解他们,让我们从coding中的一些痛点入手. 依赖注入 Dependency Injection : 如果A类要使用B类的一个方法,首先必须拥有B类的实例的引用,其次,在调用B类方法时,引用必须被B类的实例赋值,否则空指针.对于面对对象的java语言来说,这一场景,是极具备普遍性,的重复劳动. 所以Spring根据配置(或注解)帮我们把对象A.B.C....构造好,放到容器中,并基于配置的reference关系,帮我们完成大量的赋值操…
IOC控制反转:创建实例对象的控制权从代码转换到Spring容器.实际就是在xml中配置.配置对象 实例化对象时,进行强转为自定义类型.默认返回类型是Object强类型. ApplicationContext 需要引依赖.Spring核心 依赖context core beans spEL //创建Spring容器 使用ApplicationContext接口new出ClassPathXmlApplicationContext实现类 ,传参为Spring配置文件. ApplicationCont…
1. What is aspect-oriented programming?(什么是面向切面编程?) Aspects help to modularize cross-cutting concerns.(切面帮助我们模块化横切关注点)In short, a cross-cutting concern can be described as any functionality that affects multiple points of an application.(简单来说, 一个横切关注…
IOC的好处 ioc或者说di的概念很显然了,反转控制和依赖注入,那本来直接new就行的东西,为什么要搞这么复杂呢?? 开发维护方便,高层设计不用依赖底层的,不然底层一个类改下构造器,高层就全要改,因为依赖很严重,而控制反转后,只要把底层的类当作参数一样传到高层中就好.举例就是一个汽车类中要用到轮子类,轮子类如果构造器要改的话,汽车类中的new就也要改. 创建实例的时候,不用知道那个类的构造器,或者说要怎么构造,new它之类的.不用写很多new,ioc会对你需要的对象进行初始化,你只要维护一个b…
概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据) 应用场合: 如果你一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性: 如果你一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持…
目录 什么是 AOP AOP 的基本术语 Spring AOP 的简单应用 Spring AOP 与动态代理 Spring AOP 的实现原理(源码分析) 扩展:为什么 JDK 动态代理要求目标类必须实现接口 什么是 AOP AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,它是对 OOP(Object Oriented Programming,面向对象编程)的一个补充. OOP 允许我们通过类来定义对象的属性和行为,由于对象的行为是通过类中的方法来体…
1. 事务:指的是逻辑上一组操作,组成这个事务的各个执行单元,要么一起成功,要么一起失败! 2. 事务的特性 * 原子性 * 一致性 * 隔离性 * 持久性 3. 如果不考虑隔离性,引发安全性问题 * 读问题: * 脏读: * 不可重复读: * 虚读: * 写问题: * 丢失更新: 4. 如何解决安全性问题 * 读问题解决,设置数据库隔离级别 * 写问题解决可以使用 悲观锁和乐观锁的方式解决…
在看ico概念之前,先想一下我们平常需要依赖某个类时会怎么做? 无非是在要用到的地方写如下代码: Person person = new Person(); //然后就可以用person对象来获取Person类提供的服务了 person.say("hellow Ioc!"); 先不说这样做有什么不好,想一下我们的目的只是想调用person的说话服务而已,每次调用前都需要自己创建个person对象这样是否真的有必要?答案当然是no. 在上面的例子中,被注入对象直接依赖于被依赖对象(先理清…
背景 问题从一杯咖啡开始. 今天我去楼下咖啡机买了一杯「粉黛拿铁」.制作过程中显示: 我取了做好的粉黛拿铁,喝了一口,果然就是一杯热巧克力.咦咦咦,说好的拿铁呢?虽然我对「零点吧」的咖啡评价很高,觉得味道不亚于星爸爸.但是不可否认它确实给了我一杯假的拿铁. 现在很多技术专家好比品鉴咖啡的专家.他们并不需要知道咖啡豆和可可豆的区别,更不知道这两种植物长在树上是什么样子.没关系,这并不影响他们区别一杯咖啡是拿铁.摩卡还是卡布奇诺.就好像工作中遇到团队配合的情况,他们并不需要知道别人团队的产品是怎么实…
IOC的含义 new的方式创建对象,是主动去找对象.对我的资源独立就变的很难,因为这有明显的依赖关系 第二种方式创建对象.app断开了和资源的联系,.而是去找工厂要一个资源.由工厂负责和资源去的联系,并把想要的对象再转到应用系统 AccountServiceImpl使用上面这行代码也是完全可以找到自己想要的dao的   但是它自己完全找到这个dao的权利放弃了.把这个权利交给了BenFactory.BenFactory再通过一个固定的名称之后.给我们找到我想要的bean对象.这个对象是不是你能用…
struts2 + Spring +hibernate Hibernate工作原理及为什么要用?   原理:   1.读取并解析配置文件   2.读取并解析映射信息,创建SessionFactory   3.打开Sesssion   4.创建事务Transation  5.持久化操作   6.提交事务   7.关闭Session   8.关闭SesstionFactory    为什么要用:   1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码.    2. Hib…
简介 Spring框架是一种轻量级的.一站式的企业级开发解决方案 框架(framework):是一组设计思想.规范.API的精心组合,专门用来解决某一层次或领域的问题 轻量级(lightweight):此处是相对于EJB框架来说的,在资源占用.开发部署维护.学习成本等方面Spring都比EJB轻便 一站式(full-stack):即一步到位,Spring本身提供了丰富的功能特性,又直接整合了一批优秀框架,对于那些没有直接整合的其他框架,也提供了一层简单的封装让开发人员可以方便的手动整合,即Spr…
Spring框架之事务源码完全解析   事务的定义及特性: 事务是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性.事务通常是以begin transaction开始,以commit或rollback结束.commint表示提交,即提交事务的所有操作.具体地说就是将事务中所有对数据的更新写回到磁盘上的物理数据库中去,事务正常结束.rollback表示回滚,即在事务运行的过程中发生了…
一.BeanDefinition BeanDefinition是配置文件<bean>元素标签在容器中内部表示形式.创建最终的BeanDefinition主要包括两个步骤: 1)利用BeanDefinitionReader对配置信息Resource进行读取,通过XML解析器解析配置信息的DOM对象,简单地为每个<bean>生成对应的BeanDefinition对象.但是这里生成的BeanDefinition可能是半成品,因为在配置文件中,我们可能通过占位符变量引用外部属性文件的属性,…
Spring声明式事务让我们从复杂的事务处理中得到解脱.使得我们再也无需要去处理获得连接.关闭连接.事务提交和回滚等这些操作.再也无需要我们在与事务相关的方法中处理大量的try-catch-finally代码. 我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性.事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成.我们在进行事务划分时,需要进行事务定义,也就是配置事务的属性. Spring在TransactionDefinition接口中定义这些属性,…
1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都不执行.如果银行卡扣除了1000块但是ATM出钱失败的话,你将会损失1000元:如果银行卡扣钱失败但是ATM却出了1000块,那么银行将损失1000元.所以,如果一个步骤成功另一个步骤失败对双方都不是好事,如果不管哪一个步骤失败了以后,整个取钱过程都能回滚,也就是完全取消所有操作的话…
Spring声明式事务让我们从复杂的事务处理中得到解脱.使得我们再也无需要去处理获得连接.关闭连接.事务提交和回滚等这些操作.再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码. 我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性.事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成.我们在进行事务划分时,需要进行事务定义,也就是配置事务的属性. Spring在TransactionDefinition接口中定义这些属性,…
我们回顾一下计算机的发展史,从最初第一台计算机的占地面积达170平方米,重达30吨,到现如今的个人笔记本,事物更加轻量功能却更加丰富,这是事物发展过程中的一个趋势,在技术领域中同样也是如此,企业级JavaBean(Enterprise JavaBean ,EJB)在创建之初是非常成功,但是时间一久人们便开始追逐更加方便更加简易和轻量级的技术框架实现,于是Spring就应运而生,并且Spring一直开始不断地涉及到其他领域(这里就不再多详谈了),而Spring的精髓当中就包括控制反转和依赖注入.…