*1.Spring事务管理
a.什么是事务,为什么用
事务是用于保障db操作的完整性。
默认情况下一个操作就是一个事务。
如果需要将若干个操作作为一个整体,
就需要使用事务管理。
b.
===================
执行账户1减100,update
执行账户2加100,update,
===================
try{
开启事务-->别自动提交conn.setAutoCommit(false)
//xxxx主业务处理--Service
提交事务conn.commit();
}catch(){
如果发生错误做事务回滚conn.rollback();
}
=======Spring AOP事务管理=========
Aspect Oriented Programming
面向切面编程(动态代理)
可以动态将一些功能切入到原有的
目标组件,不用修改原有目标组件。
优点:可以动态切入功能灵活,
可以将主业务和共通业务处理剥离,
便于修改,便于组件重复使用。
c.事务属性控制
1)可读写
@Transactional默认可读写
当一个方法如果只有查询,
建议用只读事务@Transactional(readOnly=true)
2)回滚控制
@Transactional作用的方法如果抛出
运行时异常回滚;非运行时异常不回滚
可以使用@Transactional(
rollbackFor={IOException.class})
@Transactional
public void f1(){
//db操作
try{
//文件操作
}catch(){
//抛出运行时异常 new FileException();
}
}
3)事务传播控制
f1-->f2,事务可以从f1传到f2
当f1和f2都存在@Transactional时,
事务可以从f1传递到f2;
f2可以指定传播类型。
@Transactional(propagation=Propagation.REQUIRED)
4)事务隔离级别
在对同一个表记录做操作,如果发生事务
并发,会产生脏读,幻读,不可重复读等问题
可以通过设置事务隔离级别有效缓解或解决
设置方法@Transactional(isolation=类型)
READ_UNCOMMITED未提交可读
READ_COMMITED提交可读
REPEATABLE_READ可重复读
SERIZABLE线性操作
DEFAULT:根据数据库隔离级别选择
isolation属性默认采用的是DEFAULT
级别越低:并发处理能力强,但是安全性差
级别越高:并发处理能力低,但是安全性强
遗留的一些问题,以后需要在程序中采用
锁机制手动编程处理。
Spring事务管理---XML配置
2.Spring AOP技术
--了解AOP,了解事务原理
--*将Service抛出异常写入文件
1)AOP概念
Aspect Oriented Programming面向切面(方面)编程
(核心是方面,关注共通处理部分,将共通处理与传统
业务处理剥离,然后再动态切入。改善共通业务部分的处理)
Object Oriented Programming面向对象编程
(核心是对象,程序处理是由一系列对象互相调用完成处理)
AOP是以OOP为基础,用于改善共通业务调用。
将共通业务和传统业务进行解耦。
2)AOP相关概念
a.切面/方面(Aspect)
指的是封装共通处理逻辑,可以被动态切入到
其他目标组件方法处理上
b.切入点(Pointcut)
切入点是用于指定目标组件的,Spring提供了
切入点表达式,通过表达式指定目标组件
--方法限定表达式
execution(修饰符? 返回类型 方法名(参数) 异常?)
//匹配方法名以load开始的方法
execution(* load*(..))
//匹配NoteService组件中的load开始的方法
execution(* org.tarena.service.NoteService.load*(..))
//匹配service包下所有类型所有方法
execution(* org.tarena.service.*.*(..))
//匹配service包及子包下所有类型所有方法
execution(* org.tarena.service..*.*(..))
--类型限定表达式
within(类型)
//匹配UserService组件所有方法
within(org.tarena.service.UserService)
//匹配service包下所有类型所有方法
within(org.tarena.service.*)
//匹配service包及子包下所有类型所有方法
within(org.tarena.service..*)
--bead名称限定表达式
bean(id名称)
//匹配id=userService的组件的所有方法
bean(userService)
//匹配id名以Service结尾的所有组件的方法
bean(*Service)
c.通知(Advice)
通知是用于指定切面组件和目标组件作用的时机。
通知有以下5种通知类型
前置通知-->先执行方面,再执行目标
后置通知-->先执行目标,目标未抛出异常,再执行方面
异常通知-->先执行目标,抛出再执行方面
最终通知-->先执行目标,目标有无异常,都要执行方面
环绕通知-->先执行方面前置处理,再执行目标,
最后执行方面后置处理
try{
环绕通知--前置<aop:around>
设置前置通知<aop:before>
//执行目标方法
设置后置通知<aop:after-returning>
环绕通知--后置
}catch(){
设置异常通知<aop:after-throwing>
}finally{
设置最终通知<aop:after>
}
d.目标(Target)
目标就是要被切入的组件,也就是切入点
表达式指定的对象
e.动态代理(AutoProxy)
Spring AOP采用动态代理技术实现.
入门示例:
给每个Controller方法执行前插入一段文字
(信息:"进入Controller处理")
切入点:within(org.tarena.note.web.controller..*)
通知类型:前置通知
切面:打印一段文字信息
采用注解方式进行AOP配置
--在applicationContext.xml开启注解支持
//组件扫描
<context:component-scan base-package=""/>
//aop注解配置
<aop:aspectj-autoproxy />
--编写方面组件
//在类定义前追加 @Component和 @Aspect
//在方面前追加通知注解 @Before、 @AfterReturning
@AfterThrowing、 @Around、 @After
没有合适的资源?快使用搜索试试~ 我知道了~
达内项目(云笔记)
共701个文件
svn-base:316个
png:71个
class:50个
4星 · 超过85%的资源 需积分: 28 389 下载量 107 浏览量
2015-12-02
11:19:45
上传
评论 8
收藏 6.61MB ZIP 举报
温馨提示
2015.7达内毕业项目,可以练手!希望对刚刚接触Java的人有帮助
资源推荐
资源详情
资源评论
收起资源包目录
达内项目(云笔记) (701个子文件)
all-wcprops 8KB
all-wcprops 3KB
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 1KB
all-wcprops 953B
all-wcprops 943B
all-wcprops 830B
all-wcprops 631B
all-wcprops 615B
all-wcprops 453B
all-wcprops 439B
all-wcprops 439B
all-wcprops 427B
all-wcprops 425B
all-wcprops 310B
all-wcprops 280B
all-wcprops 278B
all-wcprops 266B
all-wcprops 266B
all-wcprops 127B
NoteServiceImpl.class 5KB
AddBookControllerTest.class 4KB
UserServiceImpl.class 4KB
LoadNoteControllerTest.class 4KB
LoadNotesControllerTest.class 3KB
NoteBookServiceImpl.class 3KB
Note.class 3KB
TestRegist.class 2KB
TestLoadAssociation.class 2KB
TestSearchNotes.class 2KB
NoteMapperDaoTest.class 2KB
TestUpdateNote.class 2KB
NoteBook.class 2KB
NoteBookMapperDaoTest.class 2KB
TestReturnKey.class 2KB
TestUserService.class 2KB
TestLoadCollection.class 2KB
User.class 2KB
SearchNote.class 2KB
LoginController.class 2KB
NoteUtil.class 2KB
TestBatchDeleteNotes.class 1KB
UserMapperDaoTest.class 1KB
ExceptionAspect.class 1KB
TestMyUserDao.class 1KB
BatchDeleteNoteController.class 1KB
LoadNotesController.class 1KB
Share.class 1KB
AddBookController.class 1KB
SearchNotesController.class 1KB
TestLog4j.class 1KB
UpdateNoteController.class 1KB
LoadBooksController.class 1KB
DeleteNoteController.class 1KB
SearchShareController.class 1KB
AddNoteController.class 1KB
RegistController.class 1KB
ShareNoteController.class 1KB
LoadNoteController.class 1KB
NoteResult.class 1KB
ControllerAspect.class 874B
MyUser.class 844B
NoteMapperDao.class 775B
NoteBookMapperDao.class 706B
NoteService.class 578B
ShareMapperDao.class 459B
UserService.class 425B
UserMapperDao.class 391B
NoteBookService.class 307B
MyUserDao.class 171B
.classpath 3KB
main.css 252KB
icon.css 241KB
umeditor.min.css 14KB
login.css 3KB
image.css 3KB
login_ghost.css 3KB
video.css 3KB
emotion.css 2KB
prettify.css 1KB
formula.css 869B
entries 8KB
entries 3KB
entries 3KB
entries 2KB
entries 2KB
entries 2KB
entries 2KB
entries 2KB
entries 2KB
entries 1KB
entries 1KB
entries 1KB
entries 909B
共 701 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
qidaif
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页