spring4典教程一个开源框架_第1页
spring4典教程一个开源框架_第2页
spring4典教程一个开源框架_第3页
spring4典教程一个开源框架_第4页
spring4典教程一个开源框架_第5页
已阅读5页,还剩233页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SpringSpring是什么是什么和是什么轻量级:Spring是非侵入性的是什么轻量级:Spring是非侵入性的Spring对象可以不依赖于Spring的API依赖注入(DI---dependencyinjection、面向切面编程(AOPaspectoriented容器Spring用.在Spring中可以使用XML和Java注解组合这些对象⼀站式IOCAOP框架和优秀的第三方类库(实际上Spring自身也提供了展现层的SpringMVC和持久层的SpringJDBC)模模安装SPRING安装SPRINGSPRINGTOOLSUITE一个Eclipse利用该插件可以更方便的Eclipse台上开发基Spring应用Help-->InstalNew.安安Click安安click安安topinretool-suite-3.4.0.RELEASE-pandclick安安ClickingOKintheAddSitedialogwillbringyoubacktothedialog'Install'安安ClickingOKintheAddSitedialogwillbringyoubacktothedialog'Install'安安Selectthexxx/SiDthathas安安Clickandthen安安安安安安Restarteclipsewhenthatis安安Restarteclipsewhenthatis安安检测是否安装成安安检测是否安装成搭开发环搭开发环BeanBeanSpring在classpath下建项建项建项建项内容提&内容提&概和ofControl):其思想是方向 和ofControl):其思想是方向 — 方法)相对于classpublicclasspublicvoidsetA(Athis.a=}Aa=getA();Bb=getB();}并使B对象的a属性被赋值为容器中ABb= BAB前--分离接口与实前--分离接口与实或前--采前--采用工厂设计模(ReportService--采用--采用反转控内容提XML内容提XMLBean(反射)&实例工厂方法)IOC&ApplicationContext在的xmlid:Bean 在的xmlid:Bean 容器中必须是唯⼀id没有指定,Spring自动将权限定性类名作Bean的名可以指定多个名字,名字之间可用逗号、分号、或空格分Spring在BeanBeanIOCBeanSpring在BeanBeanIOCBeanSpringIOC 容器的基本实现 ppliaoott:提供了更多的高级特性.是 BeanFactory是Spring框架的基础设施,面向Spring本身;ApplicationContextSpring的开发者,几乎所有的应用场合都直接使用Appliinonext而非底层的 无论使用何种方式,配置文件时相同的ApplicationContext的主要实现类 ClassPathXmlApplicationContextApplicationContext的主要实现类 ClassPathXmlApplicationContext:类路径下加载配置文 FileSystemXmlApplicationContext:ConfigurableApplicationContext扩展于ApplicationContext,新增两个主要方法:refresh()和s让ApplicationContextia在初始化上下文时就实例化所有单例的BeanWebApplicationContext专门WEB用而准备的,它允许从相对于WEB根目录的路径中完成初始化工作从容器中获从容器中获的如果只指定要返回的Bean依赖注入的方依赖注入的方支3种依赖注入的方 属性注方法注入Bean属性注方法注入Beanname<valueBean,value构造方法注通过构造方法注入Bean构造方法注通过构造方法注入BeanBean<constructor-arg<constructor- 构造方法注构造方法注按索引匹配入参构造方法注构造方法注按类型匹配入参字面value字面value<beanid="car2"<constructor-argvalue="Baoma"<constructor-arg<![CDATA[字面值]]>将字面值包裹起来<constructor-arg引用其Bean的功能.要使Bean能够引用其Bean的功能.要使Bean能够相互访问BeanBeanBean<ref>元素属性为BeanBean内部Bean的声明内Bean仅仅BeanBean内Bean仅仅BeanBean<constructor-arg>nameidBean<!--内部bean,只在内部使用,不能在外部被引用<property<beanid="car"<constructor-<constructor-<constructor-value="200000"内<bean内<beanid="person2"值值值值<beanid="person2"<constructor-arg<constructor-argnull支和持级联属性支和持级联属性的配置<beanid="person2"<propertyname="car.maxspeed"之前必须先初始化对象,否则会出现异常。而Struts2之前必须先初始化对象,否则会出现异常。而Struts2不需要,Struts2会自动创建对象并完成赋值操作。<property<beanid="car"<propertyname="car.maxspeed"集合属-数组、List、Spring<set<map>标集合属-数组、List、Spring<set<map>标<ref>指定对其 指定内置<null/List方法与集合属-List集合范集合属-List集合范<beanid="person3"name="name"name="age"value="27"/><ref<ref-List集合属直接添加内部bean-List集合属直接添加内部bean<beanid="person3"name="name"<ref<ref<beanid="car"集合属Map通过<map以使用多个<entry> 集合属Map通过<map以使用多个<entry> 或><entryvalue引用通过key-value-ref集合属性—Map集合属性—Map集合范测试配置Map集合属<beanid="newPerson"name="name"name="age"<!--使用map节点和map的entry子节配置Map类型的成员变<entrykey="AA"value-<entrykey="BB"value-集合属-Properties集合属-Properties使用<props><prop>key属性.java.util.Properties>集合属-Properties集合范配置集合属-Properties集合范配置Properties<property<prop使定义集不能将集合作独立 Bean定使定义集不能将集合作独立 Bean定义 导致其 Bean无法引用该合,所以无法在不Bean之间共享集合合使定义集使定义集使定义集配置单例集合bean使定义集配置单例集合bean,以供多个bean进行引用,需要导入util<util:list<ref<ref<beanname="name"name="age"name="cars"使p命名空XML2.5使p命名空XML2.5p使p命名空使p命名空间范<beanp:name="Queen"p:age="30"p:cars-ref="cars"/><util:list<ref<ref内容提内容提配配置里Bean动装Bean.需要做的仅仅是Spring 的配置里Bean动装Bean.需要做的仅仅是Spring 的 byType(根据类型自动装配若BeanBeanBeanconstructor(Bean配置里自动配置里自动装配范配置里配置里自动装配范<beanp:city="Shanghai"p:street="Pudong"/><beanp:brand="Audi"p:price="300000"/><!--可以使用autowire属性指定自动装配的方式,byname根据的名字和当前bean的setter风格属性名进行自动装配<beanp:name="Tom"autowire="byName"/>配置里自配置里自动装配范<beanp:city="Shanghai"<beanp:brand="Audi"<!--可以使用autowire属性指定自动装配的方式byType根据bean的类型和当前bean的属性的类型进行自动装配。<beanp:name="Tom"配置里自动装配配置里自动装配范范例:需要注意,使用按类型装配bean方式配置的时候配置文件中该类型p:city="Shanghai"p:street="Pudong"/>p:city="Dalian"p:street="Zhongshan"/>p:name="Tom"autowire="byType"/>BeanBeanautowireBeanBeanautowire配配继配Spring允许继承bean的配置beanbean.继承这个父Bean的Bean称为子Bean继配Spring允许继承bean的配置beanbean.继承这个父Bean的Bean称为子Bean从父Bean中继承配置,包括Bean的属性配置子子父Bean覆盖BeanBean把父Bean可以设置<bean>的abstracttrueSpring并不是<bean>元素里的所有属性都会被继承.比如autowireabstract也可以忽略父Bean的lss属性Bean而共享相同的属性配置.但此时abstract必须设为true继配置范继配置范例<beanp:city="Beijing"<beanid="address2"p:street="DaZhongsi"继配置范继配置范例<!--抽象bean:bean的abstract属性为true的bean。这样的bean不能指定,则该bean必须是⼀个抽象bean--><beanid="address"p:city="Beijing"bean配置的继承:使用bean的parent属性指定继承那个bean<beanid="address2"p:street="DaZhongsi"依配允许用户通depends-on属依配允许用户通depends-on属性设Bean前置依赖的Bean,前置依赖Bean,则可以通过逗号,如果前置依赖于多格或的方式配 Bean的名依配置范依配置范id="address"p:city="Beijing"p:street="DaZhongsi"parent="address"/>id="car"p:brand="Audi"id="person"p:name="Tom"p:address-ref="address2"depends-配配bean 环境作用的作用Springbeanscope的作用SpringbeanscopeBeanIOC容器里声明的Bean创建唯⼀⼀个实例,整个IOC容器范围内都能共享该实例getBean(BeanBean该作用域被称为singleton,它是所有Bean的默认作用域.单例bean范<beanid="car"单例bean范<beanid="car"<propertyname="brand"<propertyname="price"classMainClassstaticvoidmain(String[]args)ApplicationContextctxCarcar1=(Car)}}原型bean原型bean范使用bean的scope属性来配置bean<beanid="car"<propertyname="brand"<propertyname="price"配配使用外部属性文BeanBean入系统部署的细节信息使用外部属性文BeanBean入系统部署的细节信息的 后置处理器,这个处理器允许用户将配置的部分内容外移到属性文件中.可以在Bean配置文件里使用形式为${var} 注Spring注Spring <beanscontextSchema首先向项目中加入三个个jar首先向项目中加入三个个jar包,一个是c3p0的<bean<beanname="user"name="password"value="${password}"/>内容提内容提配Spring表达式语言表达式语言(简称SpELSpring表达式语言表达式语言(简称SpEL):是一个支持运行时询和操作对象图的强大的表达式语言大框号中的字符都将被认为是SpEL为 通过beanidbean 调用方法以及引用对象中的属 计算表达式的 正则表达式的匹SpEL:字面SpEL:字面量(了解即可,不常用 整数:<propertyname="count String可以使用单引号或者双引号作为字符串的定界符号<propertyname=“name”#{'Cuk'}或<propertyname='name'value='#{"Chuck"}'/> Boolean:<propertyname="enabled"SpEL:字面SpEL:字面量范<beanid="address"<propertyname="city"<propertyname="street"SpEL:引Bean、属性和方法引用其他对象引SpEL:引Bean、属性和方法引用其他对象引用其他对象的属调用其他方法,还可以链式操SpEL支持的运算符号算数运算符SpEL支持的运算符号算数运算符*加号还可以用作字符串连接比较运算符:<>lt,gt,qleSpEL支持的运算符号逻辑运算符号:SpEL支持的运算符号逻辑运算符号:ando|if-el运算符:?:r,if-el的变正则表达式eSpEL举例SpEL举例<beanid="address"使用spel<propertyname="city"<propertyname="street"<beanid="car"<propertyname="brand"<propertyname="price"使用SpEL<propertyname="tyrePerimeter"value="#{T(java.lang.Math).PI*80}"/>SpEL举例SpEL举例<beanid="person"使用SpEL引用其他的bean<propertyname="car"使用SpEL引用其他的bean<propertyname="city"在SpEL<propertyvalue="#{car.price300000金领白领<propertyname="name"SpEL:调用静态方SpEL:调用静态方法或静态属ClassObject,<beanid="car"<propertyname="brand"<propertyname="price"使用SpEL<propertyname="tyrePerimeter"value="#{T(java.lang.Math).PI*80}"/>内容提配置内容提配置容器的生命周IOC的生命周期允Bean许在SpringIOC的生命周期允Bean许在Spring 通过构造器或工厂方法创Bean Bean设置值和对Bean 调用Bean的初始化方 Bean以使用 当容器关闭时,调用Bean的销毁方destroy-Bean的生命周期方法范例packageclassCarpublic的生命周期方法范例packageclassCarpublicCar()System.out.println("car's}privateStringvoidsetBrand(Stringbrand)System.out.println("setthis.brand=}voidinit()}voiddestory()}}的生命周期方法范例<的生命周期方法范例<beanid="car"init-method="init"destroy-<propertyname="brand"的生命周期方法范例package的生命周期方法范例packagepublicclassMainpublicstaticvoidmain(String[]args){ClassPathXmlApplicationContextctx=Carcar=(Car)ctx.getBean("car");ctx.close();//关闭Ioc}}创后置处理器进创后置处理器进处理BeanBean创后置处创后置处理器对BeanSpringBean后置处理器后置处理器的生命周SpringBean 通过构造器或工厂方法创Bean Bean设置值和对Bean将Bean实例传递给Bean后置处理器的ooi 方 Bean初始化方 将Bean实例传递给Bean后置处理器的oin Bean以使用 当容器关闭时Bean销毁方添后置处理器范例classMyBeanPostProcessorimplements添后置处理器范例classMyBeanPostProcessorimplementspublicObjectObjectbean,StringbeanName)throws+bean+","+{"}bean,StringbeanName)throws{"+bean+","+beanName);Carcar=newCar();return}}添后置处理添后置处理器范例<beanid="car"init-method="init"destroy-<propertyname="brand"ObjectpostProcessBeforeInitialization(Objectbean,ObjectpostProcessAfterInitialization(Objectbean,String配置bean<bean内容提内容提&实例工厂方法)、通过调用静态工厂方法创Bean是将对通过调用静态工厂方法创Bean是将对象创建的过调用静态工厂方法创封装到静态方法中的class同d 使用<constrctor-arg> 通过调用静态工厂方法创建Bean范例packageclassCarprivateString通过调用静态工厂方法创建Bean范例packageclassCarprivateStringprivatedoubleCar(){System.out.println("Car'sStringgetBrand(){returnvoidsetBrand(Stringbrand){this.branddoublegetPrice(){returnvoidsetPrice(doubleprice){this.pricepublicStringtoString()return"Car[brand="+brand+",}++public}brand,doubleprice)==}Bean范例packageBean范例package*静态工厂方法:直接调用某一个类的静态方法就可以返回BeanclassStaticCarFactoryprivatestaticMap<String,Car>cars=newstaticcars.put("Audi",newCar("Audi",cars.put("Ford",newCar("Ford",}publicstaticCargetCar(Stringname)return}}Bean范例<!--Bean范例<!--bean<beanid="car1"<constructor-arg将对象的创建过程封装到另外将对象的创建过程封装到另外实例工厂方法个对象实例的方法里的factory-法的在factory-construtor-通过调用实例工厂方法创Bean通过调用实例工厂方法创Bean范例package*实例工厂方法:实例工厂的方法,即需要先创建工厂本身,在调用工厂的实例*classInstanceCarFactoryprivateMap<String,Car>cars=InstanceCarFactory()cars=newHashMap<>();cars.put("Audi",newCar("Audi",cars.put("Ford",new}CargetCar(Stringbrand)return}}通过调用实通过调用实例工厂方法创Bean范例<bean通过实例工厂方法来配置bean<beanid="car2"factory-bean="carFactory"factory-<constructor-argSpringBeanSpringBeanBeanBeanclassclassCarFactoryBeanimplementsprivateStringpublicvoidsetBrand(Stringbrand)=publicCargetObject()throwsreturnnewCar(brand,}publicClass<?>getObjectType()return}publicbooleanisSingleton()return}{}通过FactoryBean创建Bean<beanid="car"<propertyname="brand"内容提内容提(基于注解配置Bean;基于注解来装的属性在中扫描组能够组件扫描在中扫描组能够组件扫描下自动扫描侦测和实例化具有特定注的组件特定组件包括@ComponentSpring@Respository@Service@Controller限定类名,第一个字母小写value属性值标识组件的名在中扫描组当在组件类上使用了特定的注解之后,还需要在Spring<context:component-scan> base-在中扫描组当在组件类上使用了特定的注解之后,还需要在Spring<context:component-scan> base-属性指定⼀个需要扫描的基类包容器将会描这个基类包里及其子包中的所有当需要扫描多个包时,可以使用逗号分隔 pattern属性过滤特定的类,示例:<contxildel<contx:ldel <context:component-子节点表示要包含的目标子节点表示要排除在外的目标下可以拥有若干filter>context:exclude-filter>节在中扫描组在中扫描组<context:include-filter>filter在中扫描组件范例在中扫描组件范例packagepublicclassTestObjectpackagepublicinterfaceUserRepositorypublicvoid}packageimportpublicclassUserRepositoryImplimplementsUserRepositorypublicvoidsave(){}}在中扫描组件在中扫描组件范例packageimportpublicclassUserServicepublicvoidadd()}}packageimportpublicclassUserControllerpublicvoidexecute()}}在中扫描在中扫描组件范例指定SpringIoC容器扫描的包在中扫描在中扫描组件范例指定SpringIoC容器扫描的包可以通过resource-pattern中扫中扫描组件范例context:exclude-filter<context:component-scanbase-annotation<context:exclude-filtertype="annotation"中扫中扫描组件范例<!--该子节点需要use-default-filters<context:component-scanbase-package=".nuc.spring.annotation"annotation<context:include-filtertype="annotation"中扫中扫描组件范例<!--该子节点需要use-default-filters<context:component-scanbase-package=".nuc.spring.annotation"annotation<context:include-filtertype="annotation"中扫中扫描组件范例context:exclude-filter<context:component-scanbase-<context:exclude-filtertype="assignable"中扫中扫描组件范例<!--该子节点需要use-default-filters<context:component-scanbase-<context:include-filtertype="assignable"<context:component-scan<context:component-scan 和 、构构造器,普通字段(即使是非public),⼀切具有参数的方法都可以应用@Autowired注解默认情况下,所有使用@Autowired注解的属性都需要被设置.当Spring找不到匹配Bean配属性时,会抛出异常,若某⼀属性允许不被设置,可以@Autowired注解的required属性false默认情况下,当IOC容器里存在多个类型兼容的Bean时,通过类型的自动@QualifierBeanSpring允许对方法的入参标注@Qualifier已指定注入Bean的名称@Autowired数组类型Spring匹配的Bean进行自动装配.@Autowired集合属性Spring信息,然后自动装配所有与之兼容的Bean.@Autowired注解用在java.util.Map上时,若该Map的键值为String,那么Spring将自动装配与之MapBean,此时Bean的名称作为packagepackagepublicclass{privateUserServicepublicvoidexecute()}}packagepackageclassUserServiceprivateUserRepositorypublicvoidadd()}}<context:component-scanbase-使或自动装@Resource@Inject和Bean使或自动装@Resource@Inject和BeanBean@AutowiredBeanreqired内容提内容提泛型依赖注泛型依赖注整合整合多个配置文Spring<import进行配置文件的集成。这样在启动Spring容器时,仅需要指定importresourceSpring•?•?代码实现片代码实现片问加入后,原有的业务方法急剧问加入后,原有的业务方法急剧膨每个方法在理核心逻辑的同时还必须兼顾其他多个关注点如果日志需求发生变必须改所有模块使用⼀个代理将对象包装起来,然后用该代理对象取代原始对象.任何对原始对象的调用都要通过代理.代理对象决定是否以及何时将方使用⼀个代理将对象包装起来,然后用该代理对象取代原始对象.任何对原始对象的调用都要通过代理.代理对象决定是否以及何时将方测试测试代简AOP(Aspect-OrientedProgramming面向切面编程):是一种新的方法论,是对传统OOP(Object-OrientedAOP的主要编程对象是切面简AOP(Aspect-OrientedProgramming面向切面编程):是一种新的方法论,是对传统OOP(Object-OrientedAOP的主要编程对象是切面切关注点定义公共功能修改受影响的类横切关注点就被模块化到特AOP 每个事物逻辑位于一个位置,代码不分散,便于维护和升 业务模块更简洁,只包含核心业务代码术目标(Target):术目标(Target):程序执行的某个特定位置连接点由两个信息确定:方法表示的程序执行点;相对点表示的方位。例如ArithmethicCalculator#add()方法执行的连接点,执行点为ArithmethicCalculator#add();方位为该方法执ArithmethicCalculator的所有方法实际上都是连接点,即连接点是程序类 AOPAOPXML在要在Spring应用中使用AspectJ注解,必须在classpath下包含 AspectJ类库:aopalliance.jar、aspectj.weaver.jar和spring-aspects.jar将在要在Spring应用中使用AspectJ注解,必须在classpath下包含 AspectJ类库:aopalliance.jar、aspectj.weaver.jar和spring-aspects.jar将根元素中要在SpringAspectJ在Bean配置文件中定义⼀个空的XML元<aop:aspectj-当SpringBeanAspectJ用注解声明切只需要在中将切面声明为Bean实例SpringIOC切面之后,SpringBean在用注解声明切只需要在中将切面声明为Bean实例SpringIOC切面之后,SpringBean在Java类Java方法5 前置通知,在方法执行之前执 后置通知在方法执行之后执 @AfeRg返回通知方法返回结果之后执 @AteTong异常通知方法抛出异常之 环绕通知围绕着方法执前置通@Before前置通@Before标识这个方法是个前置通知,切点表达式表示执行ArithmeticCalculatoradd()*利用方法签名编切入点表达execution*com.atguigu.spring.ArithmeticCalculator.利用方法签名编切入点表达execution*com.atguigu.spring.ArithmeticCalculator.*(..):匹配ArithmeticCalculator中声明的所有方法,第⼀个*代表任意修饰符及任意返回值.第二个*代表任意方法匹配任意数量的参数目标类与接口与该切面在同一个包中可以略包名executionpublic*ArithmeticCalculator.*(..):配ArithmeticCalculator接口的所有公有方法.executionpublicdoubleArithmeticCalculator.*(..):配ArithmeticCalculator中返回double类型数值的方法executionpublicdouble匹配第一个参数executionpublicdoubleole,合并合并切入点表达AspectJ||,标识这个方法是个前置通知,切点表达式表示执行任意类的任意方法.第*代表匹配任意修饰符及任意返回值,第二个*标识这个方法是个前置通知,切点表达式表示执行任意类的任意方法.第*代表匹配任意修饰符及任意返回值,第二个**后置通后置通返回通返回通执行.如果只想在连接点返回的时候记录日志, returning必须在通知方法的签名中添加一个同名参数returning必须在通知方法的签名中添加一个同名参数Spring异常通将属性添加异常通将属性添加注解中如果只对某种特殊的异常类型感兴趣环绕通控制连接点.甚至可以控制是否执行连接点 环绕通控制连接点.甚至可以控制是否执行连接点 是否执行连接点的 注意即调用 环绕环绕通知示例代指定切面的优先指定切面的优先Ordered@Order注解指定.getOrder(重用切入点重用切入点定AspectJ达式.但同一个切点表达式可能会在多个通知中重复出现.AspectJ通过@Pointcut注解将⼀个切入点声明成简单的方法.切入点的方法体通常是空的,因为将切入点定切入点方法的访问控制符同时也控制着这个切入点的可⻅性中.在这种情况下,它们必须被声明为public.在引入这个切一个包中,还必须包含包名.其他通知可以通过方法名称引入该切入点重用重用切入点定义示例代引入通和MinCalculatorImplMaxCalculator引入通和MinCalculatorImplMaxCalculatorArithmeticCalculatorImpl在切面中,通过为任意字段添加@DeclareParentsAspectJdefaultImpl引入通引入通知示例代用基的配置声明切aopschema用基的配置声明切aopschema正常情况下,SpringAOP基---声明切<beansXML基---声明切<beansXMLBeanAOP<aop:config>元素内部 端Bean实例.Bean<aop:aspect>用声明切面声明切面的实例代明切入明切入<aop:aspect>义在<aop:config>元素下. 定义<aop:aspect对当前切面有 的声明切声明切入点的示例代基---声明通aop基---声明通aop<pointcut-ref<pointcut声明通知声明通知示例代声明引声明引<aop:declare-parents对的支简JDBC在JDBCJDBCJDBC简JDBC在JDBCJDBCJDBCJDBC模板方法使更新数据使更新数据使查询数据使查询数据使查询数据使查询数据简模板查类被设计成为线程安全的DAO1.5泛简模板查类被设计成为线程安全的DAO1.5泛SpringDAOIOC注模注模板示例代扩示例扩示例代在模板中使用具名参JDBCSQL?在Spring框架中,绑定在模板中使用具名参JDBCSQL?在Spring框架中,绑定使用具名参数(named在模板中使用具名参Map在模板中使用具名参MapMap事务简事务管理是企业级应用程序开发中必不可少的技事务简事务管理是企业级应用程序开发中必不可少的技这事务就是一系列的动作它们被当做一个单独的工作单事务的四个关键属性 一旦事务完成,无论发生什么系统错误它的结事务管事务管理的问必须为不同的方法重这段代码是特定于JDBC的,一旦选择类其它数据库存取码需要作出相中的事务管作为中的事务管作为企业级应用程序框架Spring不同的事务管理之上定义了⼀个抽象层应用程序开发人员不必了解底层的事务管理API,就可以使用Spring的事务管理机制.Spring既支持编程式事务管理,也支持声明式的事务管理编程式事务管将事务管理代码嵌入到业务方法中来控事务的提交和回滚编程式管理事务时须在每个事务操声明式事务管理:大多数情况下比编程式事务管理更好用.它 现事务管理.事务管理作为一种横切关注点,可以通过AOP方法模块化.Spring通过SpringAOP框架支持声明式事务中的事务管理APIAPI,中的事务管理APIAPI,利用这些事务机制.有了这些事务机制, :在用:在用需需数据表中的数表数据表中的数表Book表用事务通知声明式地管理事事务用事务通知声明式地管理事事务管理是一种横切关注为了在Spring2.x中启用声明式事务管理,可以通过txSchema<tx:advice>元素声明事务通知事先将这个Schema定义添加到<beans>根元素中去.通知是在<aop:config切入点产生关联.所以必须 SpringAOP因此,用除了在带有切入点,通知和增强器的Bean配置文件中声明事务Spring@Transactional标注事务方为了将方法定义为支持事务处理的,可以为方法添加@Transactional用除了在带有切入点,通知和增强器的Bean配置文件中声明事务Spring@Transactional标注事务方为了将方法定义为支持事务处理的,可以为方法添加@Transactional注解SpringAOP只能可以在方法或者类级别上@Transactional配置文件中只需要启用<xanottin在如果事务处理器的名称是就可以<tx:annotation-driventransaction-manager性这个元素会自动检测该名称的事务处用用事务传播属事务传播属7需Tom需TombookServicepurchase(checkout()调用时,它默认会在现有的事务内运行.这个默认的传播行为就是REQUIREDcheckout(这个事务只在checkout()方法结束的时候被提交,结果用户一本书都@TransactionalbookServicepurchase(checkout()调用时,它默认会在现有的事务内运行.这个默认的传播行为就是REQUIREDcheckout(这个事务只在checkout()方法结束的时候被提交,结果用户一本书都@TransactionalpropagationTx1Tx1Tx1Tx3Tx3开Tx2Tx2Tx1Tx1Tx1Tx1Tx3Tx3开Tx2Tx2Tx1Tx1Tx1Tx1Tx1在Spring在在Spring在并发事务所导致的问并发事务所导致的问 脏读于两个事T1T2读取了已经T2有被提交的字段后T2滚T1读取的内容就是临时且无 不可重复读:对于两个事T1T2读取了一个字段 幻读:对于两个事T1T2从一个表中读取了一个字段,T2该表中插入了一些新的行后T1次读取同一个表,就会多出几行.事务的隔离级事务的隔离级支持的事务支持的事务隔离级事务的隔离级别要得到底层数据库引擎的支持,而不是应用程序或者架的支持Oracle持2事务隔离级别:READ_COMMITEDSERIALIZABLEMysql支持4中事务隔离级别.设置隔离事务属@Transactional设置隔离事务属@Transactional<tx:method>在Spring设置回滚事务属默认情况下只有未检查异常(RuntimeException设置回滚事务属默认情况下只有未检查异常(RuntimeExceptionnoRollbackFor 遇到时必须进行回 noRollbackFor:一组异常类,遇到时必须不回设置回滚事设置回滚事务属2.x<tx:method超时和只读属超时和只读属超时事务属性设置超时和只读事设置超时和只读事务属超时和只读属性可以@Transactional解中定义.超时属性Spring2.x知中只读属性可<tx:method>元素中进整整支持大多数流行的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论