﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-心如止水 一心向佛</title><link>http://www.blogjava.net/yangaiyou/</link><description>茶亦醉人何必酒  书能香我无须花！</description><language>zh-cn</language><lastBuildDate>Thu, 30 Apr 2026 05:53:29 GMT</lastBuildDate><pubDate>Thu, 30 Apr 2026 05:53:29 GMT</pubDate><ttl>60</ttl><item><title>vim</title><link>http://www.blogjava.net/yangaiyou/archive/2019/01/29/433625.html</link><dc:creator>杨爱友</dc:creator><author>杨爱友</author><pubDate>Tue, 29 Jan 2019 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/yangaiyou/archive/2019/01/29/433625.html</guid><wfw:comment>http://www.blogjava.net/yangaiyou/comments/433625.html</wfw:comment><comments>http://www.blogjava.net/yangaiyou/archive/2019/01/29/433625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangaiyou/comments/commentRss/433625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangaiyou/services/trackbacks/433625.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;">1. 删除行命令</span><br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->dd: 删除游标所在的一整行(常用)<br />
ndd: n为数字。删除光标所在的向下n行，例如20dd则是删除光标所在的向下20行<br />
d1G: 删除光标所在到第一行的所有数据<br />
dG: 删除光标所在到最后一行的所有数据<br />
d$: 删除光标所在处，到该行的最后一个字符<br />
d0: 那个是数字0,删除光标所在到该行的最前面的一个字符<br />
x,X: x向后删除一个字符(相当于[<span style="color: #0000FF; ">del</span>]按键),X向前删除一个字符(相当于[backspace]即退格键)&nbsp;</div>
<div>2. 插入命令<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
<div>dd</div>
<div></div>
d
-->I&nbsp;在当前行首插入<br />
A&nbsp;在当前行尾插入<br />
o&nbsp;在当前行之后插入一行<br />
O&nbsp;在当前行之前插入一行</div>
</div>
<div>
<div style="display: inline-block;">3. 移动命令<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->w&nbsp;向前移动一个单词（光标停在单词首部），如果已到行尾，则转至下一行行首。此命令快，可以代替l命令。<br />
<br />
b&nbsp;向后移动一个单词&nbsp;2b&nbsp;向后移动2个单词<br />
到指定行，冒号+行号，回车，比如跳到240行就是&nbsp;:240回车<br />
Ctrl&nbsp;+&nbsp;e&nbsp;向下滚动一行<br />
Ctrl&nbsp;+&nbsp;y&nbsp;向上滚动一行<br />
Ctrl&nbsp;+&nbsp;f&nbsp;向下滚动一屏<br />
Ctrl&nbsp;+&nbsp;b&nbsp;向上滚动一屏&nbsp;&nbsp;&nbsp;&nbsp;</div>
</div>
</div>
<div>4. 拷贝和粘贴<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->yy&nbsp;拷贝当前行<br />nyy&nbsp;拷贝当前后开始的n行，比如2yy拷贝当前行及其下一行。<br />p&nbsp;&nbsp;在当前光标后粘贴,如果之前使用了yy命令来复制一行，那么就在当前行的下一行粘贴。<br />shift+p&nbsp;在当前行前粘贴</div>...</div><img src ="http://www.blogjava.net/yangaiyou/aggbug/433625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangaiyou/" target="_blank">杨爱友</a> 2019-01-29 13:59 <a href="http://www.blogjava.net/yangaiyou/archive/2019/01/29/433625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mac电脑安装双系统（以 win7为例）</title><link>http://www.blogjava.net/yangaiyou/archive/2015/09/25/427497.html</link><dc:creator>杨爱友</dc:creator><author>杨爱友</author><pubDate>Fri, 25 Sep 2015 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/yangaiyou/archive/2015/09/25/427497.html</guid><wfw:comment>http://www.blogjava.net/yangaiyou/comments/427497.html</wfw:comment><comments>http://www.blogjava.net/yangaiyou/archive/2015/09/25/427497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangaiyou/comments/commentRss/427497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangaiyou/services/trackbacks/427497.html</trackback:ping><description><![CDATA[参考文章：<br /><div>http://wenku.baidu.com/link?url=kq8VcGwEedCn5hHdSDbPsQrJCapBZje0DRRzyvEOkpqVOEP5XV--dtSL3RNC9a5Mf9K3mSJOGVwYt8VHjpUoBVTQ0L5z3WOSV-dTpSgs-My<br /><br />用一张空的U盘，利用支持软件和ISO镜像文件制作安装盘，然后将USB3.0驱动程序放进U盘<br /><br />在格式化步骤，格式化完之后要加载USB3的驱动程序，否则安装WIN7后无法使用鼠标和键盘<br />参考文章：http://bbs.feng.com/read-htm-tid-8203477.html<br /><br />启动WIN7后，可能出现黑屏&#8220;无法验证签名文件&#8221;，<span style="color: #111111; font-family: 微软雅黑, Arial, HELVETICA; line-height: 28px; background-color: #fefefe;">把windows\system32\drivers 里面那个AppleSSD.sys干掉<br />参考文章：</span>http://bbs.feng.com/read-htm-tid-9791867.html<br /><br />最后进入WIN7系统，此时之后一个盘符，需要再进行分盘，按照网上介绍，&#8220;压缩卷--新建简单分区&#8220;进行，发现竟然把原有MAC系统干掉了，这里千万注意！<br /><br />然后就是到bootcamp/drivers下面找一些网络、显卡等的驱动进行点击安装。</div><img src ="http://www.blogjava.net/yangaiyou/aggbug/427497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangaiyou/" target="_blank">杨爱友</a> 2015-09-25 16:48 <a href="http://www.blogjava.net/yangaiyou/archive/2015/09/25/427497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;a href="http://shop114450482.taobao.com/"&gt;AJAX 跨域请求 - JSONP获取JSON数据&lt;/a&gt;</title><link>http://www.blogjava.net/yangaiyou/archive/2014/10/29/419167.html</link><dc:creator>杨爱友</dc:creator><author>杨爱友</author><pubDate>Wed, 29 Oct 2014 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/yangaiyou/archive/2014/10/29/419167.html</guid><wfw:comment>http://www.blogjava.net/yangaiyou/comments/419167.html</wfw:comment><comments>http://www.blogjava.net/yangaiyou/archive/2014/10/29/419167.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/yangaiyou/comments/commentRss/419167.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangaiyou/services/trackbacks/419167.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 先在客户端注册一个callback, 然后把callback的名字传给服务器。<br><br>此时，服务器先生成 json 数据。<br>然后以 javascript 语法的方式，生成一个function , function 名字就是传递上来的参数 jsonp.<br><br>最后将 json 数据直接以入参的方式，放置到 function 中，这样就生成了一段 js 语法的文档，返回给客户端。<br><br>客户端浏览器，解析script标签，并执行返回的 javascript 文档，此时数据作为参数，传入到了客户端预先定义好的 callback 函数里.（动态执行回调函数）<br><a href="http://shop114450482.taobao.com/" style="color:red;">美丽涵涵童装店</a><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yangaiyou/archive/2014/10/29/419167.html'>阅读全文</a><img src ="http://www.blogjava.net/yangaiyou/aggbug/419167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangaiyou/" target="_blank">杨爱友</a> 2014-10-29 14:57 <a href="http://www.blogjava.net/yangaiyou/archive/2014/10/29/419167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;a href="http://shop114450482.taobao.com/"&gt;Spring 源码解读 推荐流程&lt;/a&gt;</title><link>http://www.blogjava.net/yangaiyou/archive/2014/10/29/419165.html</link><dc:creator>杨爱友</dc:creator><author>杨爱友</author><pubDate>Wed, 29 Oct 2014 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/yangaiyou/archive/2014/10/29/419165.html</guid><wfw:comment>http://www.blogjava.net/yangaiyou/comments/419165.html</wfw:comment><comments>http://www.blogjava.net/yangaiyou/archive/2014/10/29/419165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangaiyou/comments/commentRss/419165.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangaiyou/services/trackbacks/419165.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Spring源代码解析(一）：IOC容器:http://www.javaeye.com/topic/86339 <br>Spring源代码解析(二)：IoC容器在Web容器中的启动:http://www.javaeye.com/topic/86594 <br>Spring源代码解析(三）：Spring JDBC:http://www.javaeye.com/topic/87034 <br>Spring源代码解析(四）：Spring MVC:http://www.javaeye.com/topic/87692 <br>Spring源代码解析(五）：Spring AOP获取Proxy:http://www.javaeye.com/topic/88187 <br><a href="http://shop114450482.taobao.com/" style="color:red;">美丽涵涵童装店</a><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yangaiyou/archive/2014/10/29/419165.html'>阅读全文</a><img src ="http://www.blogjava.net/yangaiyou/aggbug/419165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangaiyou/" target="_blank">杨爱友</a> 2014-10-29 14:54 <a href="http://www.blogjava.net/yangaiyou/archive/2014/10/29/419165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;a href="http://shop114450482.taobao.com/"&gt;提高淘宝店铺访问量办法&lt;/a&gt;</title><link>http://www.blogjava.net/yangaiyou/archive/2014/10/29/419164.html</link><dc:creator>杨爱友</dc:creator><author>杨爱友</author><pubDate>Wed, 29 Oct 2014 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/yangaiyou/archive/2014/10/29/419164.html</guid><wfw:comment>http://www.blogjava.net/yangaiyou/comments/419164.html</wfw:comment><comments>http://www.blogjava.net/yangaiyou/archive/2014/10/29/419164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangaiyou/comments/commentRss/419164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangaiyou/services/trackbacks/419164.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <a href="http://shop114450482.taobao.com/" style="color:red;">提高淘宝店铺访问量办法</a>&nbsp;&nbsp;<a href='http://www.blogjava.net/yangaiyou/archive/2014/10/29/419164.html'>阅读全文</a><img src ="http://www.blogjava.net/yangaiyou/aggbug/419164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangaiyou/" target="_blank">杨爱友</a> 2014-10-29 14:34 <a href="http://www.blogjava.net/yangaiyou/archive/2014/10/29/419164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;a href="http://shop114450482.taobao.com/"&gt;Spring源码学习-bean加载&lt;/a&gt;</title><link>http://www.blogjava.net/yangaiyou/archive/2014/08/29/417486.html</link><dc:creator>杨爱友</dc:creator><author>杨爱友</author><pubDate>Fri, 29 Aug 2014 02:47:00 GMT</pubDate><guid>http://www.blogjava.net/yangaiyou/archive/2014/08/29/417486.html</guid><wfw:comment>http://www.blogjava.net/yangaiyou/comments/417486.html</wfw:comment><comments>http://www.blogjava.net/yangaiyou/archive/2014/08/29/417486.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/yangaiyou/comments/commentRss/417486.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangaiyou/services/trackbacks/417486.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <a href="http://shop114450482.taobao.com/" style="color:red;">Spring源码学习-bean加载</a><br>一个applicationContext.xml配置文件，这个不可少<br>一个bean，这里我没用接口，直接用一个普通的类做为Spring的bean<br>一个Junit测试类&nbsp;&nbsp;<a href='http://www.blogjava.net/yangaiyou/archive/2014/08/29/417486.html'>阅读全文</a><img src ="http://www.blogjava.net/yangaiyou/aggbug/417486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangaiyou/" target="_blank">杨爱友</a> 2014-08-29 10:47 <a href="http://www.blogjava.net/yangaiyou/archive/2014/08/29/417486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring源码学习-环境搭建</title><link>http://www.blogjava.net/yangaiyou/archive/2014/08/21/417201.html</link><dc:creator>杨爱友</dc:creator><author>杨爱友</author><pubDate>Thu, 21 Aug 2014 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/yangaiyou/archive/2014/08/21/417201.html</guid><wfw:comment>http://www.blogjava.net/yangaiyou/comments/417201.html</wfw:comment><comments>http://www.blogjava.net/yangaiyou/archive/2014/08/21/417201.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/yangaiyou/comments/commentRss/417201.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangaiyou/services/trackbacks/417201.html</trackback:ping><description><![CDATA[<p style="line-height:28px;text-indent:2em;">学习源码是一件非常耗时费力的事情，需要有足够的时间和持久的耐心，下面是我阅读郝佳老师的《Spring源码深度解析》所做的记录，书中以Spring3.2讲解，使用jdk1.7。</p><p>
</p><p style="color: #ff6600; font-size: 18pt;line-height:35px;font-weight: bold;">准备工作</p>
<p style="line-height:28px;text-indent:2em;">1. 安装github：现在spring源代码都在github管理，所以首先需要下载githup，下载地址http://windows.github.com；</p>
<p style="line-height:28px;text-indent:2em;">2. 安装gradle构建工具：下载地址http://www.gradle.org/downloads，下载完后进行解压到任意盘符，然后增加环境变量GRADLE_HOME，并在环境变量bin中增加%GRADLE_HOME%/bin，打开DOS窗口，运行gradle -v，出现版本号等信息，表示安装成功；</p>
<p style="line-height:28px;text-indent:2em;">3. 下载Spring源码：首先打开git shell，切换到你的工作目录，然后输入以下命令：git clone git://github.com/SpringSource/Spring-framework.git，后面一串是源码下载地址。大概半小时的样子，就可以下载完成，这时候在你的工作目录中就会出现Spring-framework的目录，里面有Spring各组件的源码包；<br />
</p>
<p style="line-height:28px;text-indent:2em"> 4. 构建导入：下载下来的代码不能直接导入Eclipse，要先转换成Eclipse能读取的形式。因为所有组件都会依赖spring-core，所有我们首先要转换Spring-core工程，在命令窗口切换到Spring-core工程，运行gradle cleanidea eclipse命令，我们会看到开始下载工程所依赖的jar包，几分钟后执行完毕，再来看Spring-core文件夹，多了.classpath、.project等文件，这是Eclipse工程所必须的，然后可以把他导入到eclipse。因为大部分Spring组件都会用到&nbsp;spring-beans、spring-context、spring-aop，而他们又依赖spring-expression、spring-instrument，所以我们干脆先把这些工程都进行转换并导入eclipse。</p>
<p style="line-height:28px;text-indent:2em;">我初次导入过程并不顺利，拿spring-core为例，其中以来的一个jar包是Spring-framework/spring-core/build/libs/spring-asm-repack-4.0.jar，但我工程里面并没有他，只好在网上下载了一个，并加入构建路径，其次我还发现少commons-pool-1.5.3.jar、spring-cglib-repack-3.0.jar，都一一下载，最后还是报错没有java.util.concurrent.ForkJoinPool类，发现这个版本必须使用jdk1.7以上，1.6没有这个包。折腾半天，终于几个工程没变异错误了，向前迈进了一步。</p>
<span style="color: #ff6600; font-size: 24px; font-weight: bold; line-height: 35px;"></span>
<br />
<br />
<br />
<div></div><img src ="http://www.blogjava.net/yangaiyou/aggbug/417201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangaiyou/" target="_blank">杨爱友</a> 2014-08-21 16:04 <a href="http://www.blogjava.net/yangaiyou/archive/2014/08/21/417201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>事务传播性测试</title><link>http://www.blogjava.net/yangaiyou/archive/2014/08/08/416738.html</link><dc:creator>杨爱友</dc:creator><author>杨爱友</author><pubDate>Fri, 08 Aug 2014 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/yangaiyou/archive/2014/08/08/416738.html</guid><wfw:comment>http://www.blogjava.net/yangaiyou/comments/416738.html</wfw:comment><comments>http://www.blogjava.net/yangaiyou/archive/2014/08/08/416738.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangaiyou/comments/commentRss/416738.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangaiyou/services/trackbacks/416738.html</trackback:ping><description><![CDATA[<div><br />场景1：aService里面有个savePerson方法，里面将调用bService中的保存方法进行保存；<br /><br />&nbsp; &nbsp; aService代码：<br /><div><span style="white-space:pre">	</span>@Transactional(propagation=Propagation.REQUIRED)</div><div><span style="white-space:pre">	</span>public void savePerson() {</div><div><span style="white-space:pre">		</span>Person p1 = new Person();</div><div><span style="white-space:pre">		</span>p1.setName("yangay");</div><div></div><div><span style="white-space:pre">		</span>Person p2 = new Person();</div><div><span style="white-space:pre">		</span>p2.setName("lisan");</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>messageBean.saveTwo(p1, p2);</div><div><span style="white-space:pre">		</span>messageBean.savePerson(null);</div><div><span style="white-space:pre">	</span>}<br />&nbsp; &nbsp; &nbsp;bService代码：<br />&nbsp; &nbsp; &nbsp;<span style="white-space: pre;">	</span>@Transactional(propagation=Propagation.REQUIRED)</div><div><span style="white-space:pre">	</span>public void saveOne(Person p){</div><div><span style="white-space:pre">		</span>this.dao.save(p);</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>@Transactional(propagation=Propagation.REQUIRES_NEW)</div><div><span style="white-space:pre">	</span>public void saveTwo(Person p1,Person p2){</div><div><span style="white-space:pre">		</span>this.dao.save(p1);</div><div><span style="white-space:pre">		</span>this.dao.save(p2);</div><div><span style="white-space:pre">	</span>}<br />&nbsp; &nbsp; 因为saveTwo的传播特性设置为requires_new，saveTwo方法单独起一个事务，所以当调用saveOne抛出异常之后，不会影响saveTwo事务提交，事实上，在saveTwo返回之前已经将事务提交，所以p1、p2对象能保存入库；<br />&nbsp; &nbsp; 如果将saveTwo方法的传播特性设置为required，这时候三个方法公用一个事务，当saveOne抛出异常后，整个事务回滚，数据不能入库；<br /><br />场景2：<br />&nbsp;aService代码：<br /><div><span style="white-space:pre">	</span>@Transactional(propagation=Propagation.REQUIRED)</div><div><span style="white-space:pre">	</span>public void savePerson() {</div><div><span style="white-space:pre">		</span>try{</div><div><span style="white-space:pre">			</span>Person p1 = new Person();</div><div><span style="white-space:pre">			</span>p1.setName("yangay");</div><div></div><div><span style="white-space:pre">			</span>Person p2 = new Person();</div><div><span style="white-space:pre">			</span>p2.setName("lisan");</div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">			</span>messageBean.saveTwo(p1, null);</div><div><span style="white-space:pre">		</span>}catch(Exception ex){</div><div><span style="white-space:pre">			</span>ex.printStackTrace();</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div>&nbsp;bService代码：<br /><div>&nbsp; &nbsp; &nbsp; &nbsp; @Transactional(propagation=Propagation.REQUIRED)</div><div><span style="white-space:pre">	</span>public void saveTwo(Person p1,Person p2){</div><div><span style="white-space:pre">		</span>this.dao.save(p1);</div><div><span style="white-space:pre">		</span>this.dao.save(p2);</div><div><span style="white-space:pre">	</span>}</div>&nbsp; &nbsp; &nbsp;因为异常被catch了，所以事务不回滚，p1正常入库；<br />场景3：<br />&nbsp;aService代码：<br /><div><span style="white-space:pre">	</span>@Transactional(propagation=Propagation.REQUIRED)</div><div><span style="white-space:pre">	</span>public void savePerson() {</div><div><span style="white-space:pre">		</span>try{</div><div><span style="white-space:pre">			</span>Person p1 = new Person();</div><div><span style="white-space:pre">			</span>p1.setName("yangay");</div><div></div><div><span style="white-space:pre">			</span>Person p2 = new Person();</div><div><span style="white-space:pre">			</span>p2.setName("lisan");</div><div></div><div><span style="white-space:pre">			</span>messageBean.saveOne(p1);</div><div><span style="white-space:pre">			</span>messageBean.saveTwo(p2, null);</div><div><span style="white-space:pre">		</span>}catch(Exception ex){</div><div><span style="white-space:pre">			</span>ex.printStackTrace();</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div>&nbsp;bService代码：<br /><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Transactional(propagation=Propagation.REQUIRED)</div><div><span style="white-space:pre">	</span>public void saveOne(Person p){</div><div><span style="white-space:pre">		</span>this.dao.save(p);</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>@Transactional(propagation=Propagation.REQUIRED)</div><div><span style="white-space:pre">	</span>public void saveTwo(Person p1,Person p2){</div><div><span style="white-space:pre">		</span>this.dao.save(p1);</div><div><span style="white-space:pre">		</span>this.dao.save(p2);</div><div><span style="white-space:pre">	</span>}</div>&nbsp; &nbsp; &nbsp; &nbsp; 开始以为有了try catch，p1能保存进去，但经过测试，发现会报错。因为saveTwo时抛出异常，首先被spring框架个catch住，将事务标记为rollbackonly，然再往出抛异常，最后被savePerson方法catch住，所以事务能够提交，但当提交的时候，<span style="background-color: #ffffff;"><font face="Helvetica, Tahoma, Arial, sans-serif"><span style="line-height: 25.200000762939453px;">发现标志位已经被设置了，不应该去提交了，然后吭哧吭哧的回滚调，再提示你已经被设置成rollback-only了。</span></font><br /><font face="Helvetica, Tahoma, Arial, sans-serif"><span style="line-height: 25.200000762939453px;">&nbsp; &nbsp; &nbsp; &nbsp; 但如果saveTwo的传播特性改为require_new，因为他单起一个事务，不会影响父事务的提交，所以p1能保存，p2失败；</span></font><br /><br /><font face="Helvetica, Tahoma, Arial, sans-serif"><span style="line-height: 25.200000762939453px;">场景4：</span></font><br /><font face="Helvetica, Tahoma, Arial, sans-serif"><span style="line-height: 25.200000762939453px;">事务在多个对象之间才有传播特性</span></font><br /></span><div><span style="line-height: 25.200000762939453px;"><span style="white-space: pre;">	</span>@Override</span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">	</span>public void savePerson() {</span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">			</span>Person p1 = new Person();</span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">			</span>p1.setName("yangay");</span></div><div><span style="line-height: 25.200000762939453px;"><br /></span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">			</span>Person p2 = new Person();</span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">			</span>p2.setName("lisan");</span></div><div><span style="line-height: 25.200000762939453px;"><br /></span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">			</span>saveTwo(p1,null);</span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 25.200000762939453px;"><br /></span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">	</span>@Transactional(propagation=Propagation.REQUIRED)</span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">	</span>public void saveTwo(Person p1,Person p2){</span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">		</span>messageBean.saveOne(p1);</span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space:pre">		</span>messageBean.saveOne(p2);</span></div><div><span style="line-height: 25.200000762939453px;"><span style="white-space: pre;">	</span>}</span></div>&nbsp; &nbsp; 两个方法在一个类里面，<span style="line-height: 25.200000762939453px;">saveTwo并没有事务，p1能提交；但如果把saveTwo放到另外一个类，则saveTwo就会有事务，p1不能提交；<br /></span>&nbsp; &nbsp; 如果要同一个类里面的saveTwo执行事务，可在配置文件增加&lt;aop:aspectj-autoproxy expose-proxy="true"/&gt;，然后((Iservice)AopContext.currentProxy()).<span style="line-height: 25.200000762939453px;">saveTwo()，这样执行的就是代理的方法，就会有事务（Iservice必须是你定义的接口）</span></div></div><img src ="http://www.blogjava.net/yangaiyou/aggbug/416738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangaiyou/" target="_blank">杨爱友</a> 2014-08-08 15:43 <a href="http://www.blogjava.net/yangaiyou/archive/2014/08/08/416738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB报错javax.naming.NameNotFoundException: xxx not bound的解决办法</title><link>http://www.blogjava.net/yangaiyou/archive/2014/05/28/414209.html</link><dc:creator>杨爱友</dc:creator><author>杨爱友</author><pubDate>Wed, 28 May 2014 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/yangaiyou/archive/2014/05/28/414209.html</guid><wfw:comment>http://www.blogjava.net/yangaiyou/comments/414209.html</wfw:comment><comments>http://www.blogjava.net/yangaiyou/archive/2014/05/28/414209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangaiyou/comments/commentRss/414209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangaiyou/services/trackbacks/414209.html</trackback:ping><description><![CDATA[<font color="#333333" face="Hiragino Sans GB W3, Hiragino Sans GB, Arial, Helvetica, simsun, u5b8bu4f53" size="3"><span style="line-height: 28px; background-color: #ffffff;">当我把jboss/client下的所有jar和ejb工程jar方到web工程下，编写main函数可以调用到EJB的bean,而将web工程发布出去后，就调用不到了，报错&#8220;</span></font>javax.naming.NameNotFoundException: xxx not bound&#8221;，<font color="#333333" face="Hiragino Sans GB W3, Hiragino Sans GB, Arial, Helvetica, simsun, u5b8bu4f53" size="3"><span style="line-height: 28px; background-color: #ffffff;">折腾了五六个小时，网上说了各种各样的原因，都没能解决，最后看这位兄弟的文章，问题才得以解决。<br /><a href="http://blog.163.com/zzk331@126/blog/static/142674599200957111441126/">http://blog.163.com/zzk331@126/blog/static/142674599200957111441126/<br /></a>如果<a href="http://blog.163.com/zzk331@126/blog/static/142674599200957111441126/"></a>你的问题解决了，请回复我！</span></font><img src ="http://www.blogjava.net/yangaiyou/aggbug/414209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangaiyou/" target="_blank">杨爱友</a> 2014-05-28 16:56 <a href="http://www.blogjava.net/yangaiyou/archive/2014/05/28/414209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初次接触EJB</title><link>http://www.blogjava.net/yangaiyou/archive/2014/05/28/414206.html</link><dc:creator>杨爱友</dc:creator><author>杨爱友</author><pubDate>Wed, 28 May 2014 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/yangaiyou/archive/2014/05/28/414206.html</guid><wfw:comment>http://www.blogjava.net/yangaiyou/comments/414206.html</wfw:comment><comments>http://www.blogjava.net/yangaiyou/archive/2014/05/28/414206.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/yangaiyou/comments/commentRss/414206.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangaiyou/services/trackbacks/414206.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 来到互联网公司，需要开发EJB程序，用两天的时间先学习了EJB的开发流程，我用的开发环境是myeclipse、jboss4.2、ejb3.0、struts1.3.8、jkd6、oracle、JPA，页面展现用到velocity。其实这不是一个春对ejb的学习文章，因为里面涉及了跟ejb无关的struts、velocity，如果单纯学习写ejb的helloword，数据库都不用连接，下面我描述下helloword程序的实现过程。<br>虽然技术含量不高，但写的很辛苦，需要占用首页一个位置。&nbsp;&nbsp;<a href='http://www.blogjava.net/yangaiyou/archive/2014/05/28/414206.html'>阅读全文</a><img src ="http://www.blogjava.net/yangaiyou/aggbug/414206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangaiyou/" target="_blank">杨爱友</a> 2014-05-28 15:28 <a href="http://www.blogjava.net/yangaiyou/archive/2014/05/28/414206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>