Spring学习记录(三)
一.AOP的整理总结
aop面向切面编程
横向重复代码,纵向抽取
动态代理
1.通过动态代理可以体现aop思想
2.为什么要哦用动态代理:对目标对象中的方法进行增强
spring aop开发
spring封装了动态代理代码,我们不需要手写动态代理代码
还封装了cglib代理——>可以对任何类进行代理增强
spring中的名词
连接点(Joinpoint),切入点(Ponitcut),通知(Advise),织入(weaving),切面(aspect),目标对象(target),代理(proxy)
二.Spring的AOP事务
1 什么是事务?
事务特性:acid
事务并发问题:脏读,不可重复读,幻读
事务的隔离级别:
(1) 1:读未提交
(2) 2:读已提交
(3) 4:可重复读
(4) 8:串行化
2 spring封装了事务管理的代码
事务操作:(1) 打开事务(2) 提交事务(3) 回滚事务
事务操作对象:因为在不同平台,操作事务的代码各不相同,所以spring提供了一个接口PlatformTransactionManager
PlatformTransactionManager接口(核心对象): JDBCTransactionManager,HibernateTransactionManager,DataSourceTransactionManager(Mybaits)。在spring中的事务管理最为核心的对象就是TransactionManager
spring管理事务的属性:(1)事务隔离级别 (2)是否只读(true只读,false可操作) (3) 事务的传播行为:决定业务方法之间调用,事务应该如何处理
3 spring管理事务方式
(1)编码式
(2) xml配置(aop)
springAOP准备了事务通知(已经写好,环绕通知),目标对象也已经根据自身情况编写好业务逻辑,所以只剩下配置文件,来将通知织入目标对象,生成代理对象。
- <!-- 配置事务通知 -->
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <tx:attributes>
- <!-- 企业开发中,基本上都是用通配符的方式配置,只要service的方法名有这些开头,就会有事务属性
- 其中isolation表示事务隔离级别
- propagation表示事务传播行为一般都是required
- read-only表示是否只读
- -->
- <tx:method name="save*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
- <tx:method name="persist*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
- <tx:method name="update*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
- <tx:method name="modify*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
- <tx:method name="delete*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
- <tx:method name="remove*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
- <tx:method name="get*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
- <tx:method name="find*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
- </tx:attributes>
- </tx:advice>
- <!-- 配置织入 -->
- <aop:config>
- <aop:pointcut id="txPc" expression="execution(* com.javaweb.service..*ServiceImpl.*(..))" />
- <!-- 配置切面:通知+切入点 -->
- <aop:advisor advice-ref="txAdvice" pointcut-ref="txPc" />
- </aop:config>
(3) 注解配置(aop)
需要在配置文件中开启注解在管理事务
@Transaction(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=true),该注解可以在类上,也可以在方法上。
- <!-- 开启使用注解管理aop事务 -->
- <tx:annotation-driven/>
Spring学习记录(三)的更多相关文章
- Spring学习记录(三)---bean自动装配autowire
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,少写几个ref autowire: no ---默认情况,不自动装配,通过ref手动引用 byName---根据 ...
- 我的Spring学习记录(五)
在我的Spring学习记录(四)中使用了注解的方式对前面三篇做了总结.而这次,使用了用户登录及注册来对于本人前面四篇做一个应用案例,希望通过这个来对于我们的Spring的使用有一定的了解. 1. 程序 ...
- Spring 学习记录8 初识XmlWebApplicationContext(2)
主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...
- MyEclipse Spring 学习总结三 SpringMVC
MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...
- 我的Spring学习记录(二)
本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...
- 我的Spring学习记录(四)
虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...
- Spring 学习记录3 ConversionService
ConversionService与Environment的关系 通过之前的学习(Spring 学习记录2 Environment),我已经Environment主要是负责解析properties和p ...
- Spring 学习记录6 BeanFactory(2)
主题 除了Spring 学习记录5 BeanFactory 里写的几个接口外,BeanFactory的实现类还实现了一些其他接口,这篇文章主要介绍这些接口和实现类. 结构 DefaultListabl ...
- spring 学习(三):aop 学习
spring 学习(三):aop 学习 aop 概念 1 aop:面向切面(方面)编程,扩展功能不修改源代码实现 2 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 3 aop底层使用动态代 ...
随机推荐
- POJ1141Brackets Sequence 解题报告
题目链接1 题目链接2 题目大意 给出一个括号序列,添加最少的括号使序列正确 解题思路 先将问题简单化,从求序列退化为求最小添加括号数的问题 用区间dp n³解决 f[l][r]表示使第l个到r个区间 ...
- 029 Divide Two Integers 两数相除
不使用乘号,除号和取模符号将两数相除.如果溢出返回 MAX_INT.详见:https://leetcode.com/problems/divide-two-integers/description/ ...
- Have启动报错:java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
错误日志如下: [hadoop@master hive1.0.0]$ bin/hive Logging initialized using configuration in file:/opt/mod ...
- Storm概念学习系列之Storm与Hadoop的角色和组件比较
不多说,直接上干货! Storm与Hadoop的角色和组件比较 Storm 集群和 Hadoop 集群表面上看很类似.但是 Hadoop 上运行的是 MapReduce 作业,而在 Storm 上运行 ...
- 使用PHP导入Excel和导出数据为Excel文件
有时需要将Excel表格的数据导入到mysql数据库中,我们使用PHP的一个开源项目PHP-ExcelReader可以轻松实现Excel的导入.另外将mysql数据导出为Excel与本站上篇文章中导出 ...
- IIS下FTP服务器的PASV端口范围修改方法
应该有不少使用IIS自带的FTP服务器,IIS的FTP里的PASV模式下默认端口范围1024 - 65535,连接时会从中随机选择到响应.这样的超大范围就给服务器安全带来的隐患. 虽然可以通过一些方法 ...
- SpringBoot | 第三十七章:集成Jasypt实现配置项加密
前言 近期在进行项目安全方面评审时,质量管理部门有提出需要对配置文件中的敏高文件进行加密处理,避免了信息泄露问题.想想前段时间某公司上传github时,把相应的生产数据库明文密码也一并上传了,导致了相 ...
- Unity Download Assistant Error: 'SendRequest Error' while downloading ini file from http://files.unity3d.com/bootstrapper/29055738eb78/unity-5.3.6f1-win.ini
Unity 官网的哥们如此说道 I open the exe on Compatibility Mode , it's solved. You can try. :) 翻译就是 我用兼容模式打开,就能 ...
- 搭建Node.js Redis开发环境
创建项目 初始化为node项目 $npm init 安装redis 安装@types/node, @types/redis, typescript 初始化TypeScript 配置ts ...
- wcf问题集锦
1.处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供 ...