📄 java开源笔记:spring源代码解析.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0035)http://jiwenke-spring.blogspot.com/ -->
<HTML xmlns="http://www.w3.org/1999/xhtml" xmlns:b =
"http://www.google.com/2005/gml/b" xmlns:data =
"http://www.google.com/2005/gml/data" xmlns:expr =
"http://www.google.com/2005/gml/expr"><HEAD><TITLE>Java开源笔记:Spring源代码解析</TITLE><HEADER>
<META content="JAVA Spring 源代码解析" name=keyword></HEADER>
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
<META content=true name=MSSmartTagsPreventParsing>
<META content="MSHTML 6.00.2900.3199" name=GENERATOR><LINK
title="Java开源笔记:Spring源代码解析 - Atom"
href="http://jiwenke-spring.blogspot.com/feeds/posts/default"
type=application/atom+xml rel=alternate><LINK title="Java开源笔记:Spring源代码解析 - RSS"
href="http://jiwenke-spring.blogspot.com/feeds/posts/default?alt=rss"
type=application/rss+xml rel=alternate><LINK title="Java开源笔记:Spring源代码解析 - Atom"
href="http://www.blogger.com/feeds/4147982534777444487/posts/default"
type=application/atom+xml rel=service.post><LINK title=RSD
href="http://www.blogger.com/rsd.g?blogID=4147982534777444487"
type=application/rsd+xml rel=EditURI>
<STYLE id=page-skin-1 type=text/css>BODY {
BACKGROUND: #ffffff; MARGIN: 0px; FONT: 100% Trebuchet, Trebuchet MS, Arial, sans-serif; COLOR: #000000
}
A:link {
COLOR: #5588aa; TEXT-DECORATION: none
}
A:visited {
COLOR: #999999; TEXT-DECORATION: none
}
A:hover {
COLOR: #000000; TEXT-DECORATION: underline
}
A IMG {
BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px
}
#outer-wrapper {
MARGIN: 0px 3em
}
H1 {
MARGIN-BOTTOM: 0px; FONT: bold italic 200% Verdana, sans-serif; COLOR: #000000; BORDER-BOTTOM: #999999 1px dotted
}
H1 A {
COLOR: #000000
}
H1 A:link {
COLOR: #000000
}
H1 A:visited {
COLOR: #000000
}
H2 {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
#main .widget {
CLEAR: both; MARGIN-BOTTOM: 20px; PADDING-BOTTOM: 10px; BORDER-BOTTOM: #999999 1px dotted
}
#main .Header {
BORDER-BOTTOM-WIDTH: 0px
}
H2.date-header {
FONT-SIZE: 90%; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 0px; COLOR: #555555; PADDING-TOP: 15px
}
H3.post-title {
FONT-SIZE: 140%; COLOR: #000000
}
.post {
PADDING-RIGHT: 10%; PADDING-LEFT: 5%
}
.post-footer {
COLOR: #555555
}
#comments {
FONT-WEIGHT: bold; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 0px; COLOR: #000000; PADDING-TOP: 30px
}
#comments .comment-footer {
DISPLAY: inline; FONT-WEIGHT: normal; FONT-SIZE: 1em; COLOR: #555555; MARGIN-RIGHT: 10px
}
.comment-author {
MARGIN-TOP: 3%
}
.comment-body {
FONT-WEIGHT: normal; FONT-SIZE: 1em
}
.deleted-comment {
COLOR: gray; FONT-STYLE: italic
}
.comment-link {
MARGIN-LEFT: 0.6em
}
.feed-links {
CLEAR: both; LINE-HEIGHT: 2.5em
}
#blog-pager-newer-link {
FLOAT: left
}
#blog-pager-older-link {
FLOAT: right
}
#blog-pager {
TEXT-ALIGN: center
}
.clear {
CLEAR: both
}
.profile-img {
FLOAT: left; MARGIN: 0px 5px 5px 0px
}
BODY#layout #outer-wrapper {
MARGIN: 0px 50px
}
</STYLE>
<!-- -->
<STYLE type=text/css>@import url( http://www.blogger.com/css/blog_controls.css );
@import url( http://www.blogger.com/dyn-css/authorization.css?blogID=4147982534777444487 );
#navbar-iframe {
DISPLAY: block
}
</STYLE>
<LINK href="Java开源笔记:Spring源代码解析.files/2791266615-blog.css" type=text/css
rel=stylesheet><LINK
href="Java开源笔记:Spring源代码解析.files/3319451950-blogarchive.css" type=text/css
rel=stylesheet>
<SCRIPT src="Java开源笔记:Spring源代码解析.files/1533466593-widgets.js"
type=text/javascript></SCRIPT>
</HEAD>
<BODY>
<DIV class="navbar section" id=navbar>
<DIV class="widget Navbar" id=Navbar1><IFRAME id=navbar-iframe marginWidth=0
marginHeight=0 src="Java开源笔记:Spring源代码解析.files/CAFII1JN.htm" frameBorder=0
width="100%" scrolling=no height=30></IFRAME>
<DIV id=space-for-ie></DIV></DIV></DIV>
<DIV id=outer-wrapper>
<DIV class="main section" id=main>
<DIV class="widget AdSense" id=AdSense2>
<DIV class=widget-content>
<SCRIPT type=text/javascript><!--google_ad_client="pub-7999153797681827";google_ad_host="pub-1556223355139109";google_ad_width=234;google_ad_height=60;google_ad_format="234x60_as";google_ad_type="text";google_color_border="FFFFFF";google_color_bg="FFFFFF";google_color_link="29303B";google_color_url="473624";google_color_text="1B0431";//--></SCRIPT>
<SCRIPT src="Java开源笔记:Spring源代码解析.files/show_ads.js"
type=text/javascript></SCRIPT>
</DIV></DIV>
<DIV class="widget Header" id=Header1>
<DIV id=header-inner>
<DIV class=titlewrapper>
<H1 class=title>Java开源笔记:Spring源代码解析 </H1></DIV>
<DIV class=descriptionwrapper>
<P
class=description><SPAN>夜半待客客不至,闲敲棋子落灯花;一个好的开源软件代码就像一卷优雅的棋谱,让我们好好享受一下吧!</SPAN></P></DIV></DIV></DIV>
<DIV class="widget Blog" id=Blog1>
<DIV class="blog-posts hfeed"><!-- google_ad_section_start -->
<H2 class=date-header>2007年6月9日 星期六</H2>
<DIV class="post hentry uncustomized-post-template"><A
name=5535501562609619884></A>
<DIV class=post-header-line-1></DIV>
<DIV class="post-body entry-content">
<P>我们看看Spring中的事务处理的代码,使用Spring管理事务有声明式和编程式两种方式,声明式事务处理通过AOP的实现把事物管理代码作为方面封装来横向插入到业务代码中,使得事务管理
代码和业务代码解藕。在这种方式我们结合IoC容器和Spirng已有的FactoryBean来对事务管理进行属性配置,比如传播行为,隔离级别等。其
中最简单的方式就是通过配置TransactionProxyFactoryBean来实现声明式事物;<BR>在整个源代码分析中,我们可以大致可以看到Spring实现声明式事物管理有这么几个部分:<BR>
<UL>
<LI>对在上下文中配置的属性的处理,这里涉及的类是TransactionAttributeSourceAdvisor,这是一个通知器,用它来对属性值进行处理,属性信息放在TransactionAttribute中来使用,而这些属性的处理往往是和对切入点的处理是结合起来的。对属性的处理放在类<SPAN><SPAN>TransactionAttributeSource中完成。</SPAN></SPAN>
<LI>创建事物的过程,这个过程是委托给具体的事物管理器来创建的,但Spring通过TransactionStatus来传递相关的信息。
<LI>对事物的处理通过对相关信息的判断来委托给具体的事物管理器完成。</LI></UL>我们下面看看具体的实现,在TransactionFactoryBean中:<BR>public
class TransactionProxyFactoryBean extends
AbstractSingletonProxyFactoryBean<BR>implements FactoryBean, BeanFactoryAware
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -