﻿<?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-wqhtomcat</title><link>http://www.blogjava.net/wqhtomcat/</link><description>思 行 践</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:02:49 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:02:49 GMT</pubDate><ttl>60</ttl><item><title>事务（Transaction）的一些研究</title><link>http://www.blogjava.net/wqhtomcat/archive/2006/12/08/86401.html</link><dc:creator>wqhtomcat</dc:creator><author>wqhtomcat</author><pubDate>Fri, 08 Dec 2006 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/wqhtomcat/archive/2006/12/08/86401.html</guid><wfw:comment>http://www.blogjava.net/wqhtomcat/comments/86401.html</wfw:comment><comments>http://www.blogjava.net/wqhtomcat/archive/2006/12/08/86401.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wqhtomcat/comments/commentRss/86401.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wqhtomcat/services/trackbacks/86401.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于事务（</span>
				<span lang="EN-US">Transation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），大家肯定都不陌生了，因为作为一个</span>
				<span lang="EN-US">Web</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序开发人员来说，我们一般都会和数据库打交道，然后对数据库中的数据进行一系列的操作，那么为了保证我们对数据操作的合理性我们就不能不用到事务，虽然事务的实现不需要我们去操心，但是我们还是需要对事务进行一些了解，这样我们才能够明白我们日常所使用的东西，比如我们常用的开源框架</span>
				<span lang="EN-US">Spring</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">Hibernat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等都会涉及到事务的问题，虽然事务有很多不同的实现，如符合</span>
				<span lang="EN-US">JTA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的事先，</span>
				<span lang="EN-US">JDBC</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的实现等等，但是其原理都是差不多的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于事务的理解，这个我觉得有必要说一下，一般大家看到的理解都是很正式的、书面的，有时候让人觉得有些乱，并且细节的东西太多，在这里我就不说说课贴书了，呵呵，那我就把我自己的一点理解说一下：刚接触到事务的时候，感觉还有些模糊，慢慢的感觉清晰了一些，事务是为了什么而产生的呢？就是为了对付并发而造成的对数据的修改以及读取时的错误（或者说是一些不正常的现象），如果没有并发，没有资源的同时访问，估计也就用不到事务这个玩意了，呵呵，就像我们在单击上使用的单用户的软件一样，应该不会用到事务吧，一般又没有人跟你争，控制个啥子啊！我觉得事务就可以这么理解。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而对于事务的分类，一般分为本地事务，即一个数据库的情况；再一个就是全局事务，也就是多个数据库的情况（其数据库事务的控制称为</span>
				<span lang="EN-US">XA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），具体的情况可以看下面几个链接的介绍：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://blog.csdn.net/ladofwind/archive/2006/09/08/1194812.aspx">http://blog.csdn.net/ladofwind/archive/2006/09/08/1194812.aspx</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于数据库事务的基本概念</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://www.huihoo.com/middleware/trade_middleware.html">http://www.huihoo.com/middleware/trade_middleware.html</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面有介绍关于</span>
				<span lang="EN-US">XA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的内容</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://www.javaeye.com/topic/6302">http://www.javaeye.com/topic/6302</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对跨数据库事务的一些讨论（总结一下就是一般采用两阶段提交的方式来解决跨数据库的事务问题）</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://msdn2.microsoft.com/zh-cn/library/ckawh9ct(VS.80).aspx">http://msdn2.microsoft.com/zh-cn/library/ckawh9ct(VS.80).aspx</a> MS</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的关于单阶段和多阶段事务的提交的一些说明文档</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并且还要支持</span>
				<span lang="EN-US">XA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数据库连接池，开源的如</span>
				<span lang="EN-US">XAPool </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要说的就是这么多了，估计也基本够在</span>
				<span lang="EN-US">Web</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发中对其有一个了解</span>
				<span lang="EN-US">~ </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果有更加深入的内容再进行讨论和补充。</span>
		</p>
<img src ="http://www.blogjava.net/wqhtomcat/aggbug/86401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wqhtomcat/" target="_blank">wqhtomcat</a> 2006-12-08 16:56 <a href="http://www.blogjava.net/wqhtomcat/archive/2006/12/08/86401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA REFLECTION 学习</title><link>http://www.blogjava.net/wqhtomcat/archive/2006/12/07/86108.html</link><dc:creator>wqhtomcat</dc:creator><author>wqhtomcat</author><pubDate>Thu, 07 Dec 2006 07:55:00 GMT</pubDate><guid>http://www.blogjava.net/wqhtomcat/archive/2006/12/07/86108.html</guid><wfw:comment>http://www.blogjava.net/wqhtomcat/comments/86108.html</wfw:comment><comments>http://www.blogjava.net/wqhtomcat/archive/2006/12/07/86108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wqhtomcat/comments/commentRss/86108.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wqhtomcat/services/trackbacks/86108.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">今天感觉还是有必要再理解一下</span>
				<span lang="EN-US">Java Reflection</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在说</span>
				<span lang="EN-US">Reflection</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之前，我感觉还是先对静态语言和动态语言有一个了解比较好，下面来看一下一些资料：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">
						<a href="http://cavingdeep.cnblogs.com/archive/2005/08/03/206374.html">http://cavingdeep.cnblogs.com/archive/2005/08/03/206374.html</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">说明了什么是静态的，什么是动态的，总结一下就是：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">动态语言，准确地说，是指程序在运行时可以改变其结构：新的函数可以被引进，已有的函数可以被删除等在结构上的变化。比如众所周知的</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">ECMAScript(JavaScript)</span>
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">便是一个动态语言。除此之外如</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">Ruby</span>
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">Python</span>
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">等也都属于动态语言，而</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">C</span>
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">C++</span>
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">等语言则不属于动态语言。（通俗的说法就是：静态的是事先进行规划，考虑到后面需要做的一些事情；而动态的是管他后面会是怎么样呢，先开始再说，要的就是速度，呵呵，这有点和我们生活中做人做事的方式有些相似</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">~</span>
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">2</span>
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">
						<a href="http://www.javaeye.com/topic/35763">http://www.javaeye.com/topic/35763</a>
				</span>
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">对动态语言和静态语言的一个比较新颖的认识，主要从内存的分配和利用情况来说的，也就是说：动态语言不事先分配内存，到用的时候再说，而静态语言会先分配内存，并进行检查，大了放不下啊，呵呵</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">3</span>
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">
						<a href="http://robbin.javaeye.com/blog/33971">http://robbin.javaeye.com/blog/33971</a>
				</span>
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">讨论了静态语言和动态语言在开发方面的优势和使用情况等，还在讨论中，不好定论。</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="COLOR: #4b4b4b; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">注：一般来说，静态语言比较容易调试，而动态语言不太容易调试，因为变数太多，呵呵。</span>
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: #4b4b4b; FONT-FAMILY: Verdana">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于静态语言不够灵活，再加上现在随着系统的扩大，以及框架建立的需要，所以说静态语言也需要越来越多的动态的特性，而作为现在首当其冲的</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语言，也要通过反射，在执行期间做一些动态的调整以适应多变的需求。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">Reflection</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">机制中，最重要的一个类就是</span>
				<span lang="EN-US">Class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类，这里面记录了我们所定义的</span>
				<span lang="EN-US">class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的一些信息，我们可以通过其获得我们定义的</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量、方法、构造函数以及父类等等，并且可以动态的对其进行调用，这样就可以在某些时候将我们没有事先设计的代码在运行期间执行，而不对原有的程序进行改变。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">具体的使用样例可以参考：</span>
				<span lang="EN-US">Core Java 2 </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第六、七版，或者侯捷的</span>
				<span lang="EN-US">java Reflection </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">教程（下载地址：<a href="/Files/wqhtomcat/Java">http://www.blogjava.net/Files/wqhtomcat/Java</a>反射机制-javatwo-2004-reflection.rar）。</span>
		</p>
<img src ="http://www.blogjava.net/wqhtomcat/aggbug/86108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wqhtomcat/" target="_blank">wqhtomcat</a> 2006-12-07 15:55 <a href="http://www.blogjava.net/wqhtomcat/archive/2006/12/07/86108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TASK LIST</title><link>http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85974.html</link><dc:creator>wqhtomcat</dc:creator><author>wqhtomcat</author><pubDate>Wed, 06 Dec 2006 15:09:00 GMT</pubDate><guid>http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85974.html</guid><description><![CDATA[看来还是有许多事情要做，此Task List需要进行不断的更新<br /><br />1、<font style="BACKGROUND-COLOR: #ff0000">Java Reflection</font><br />2、Hibernate<br />3、Spring<br />4、Struts/WebWork/Struts2<br />5、<font style="BACKGROUND-COLOR: #ffa500">事务控制</font><br />6、App Server<br />7、Java基础深入<br />8、设计模式<br />9、Unix/Linux操作系统<br />10、JUnit<br />11、SVN/CVS<br />12、敏捷开发（XP）<br />13、快速构建<br />14、Oracle<br /><br />待续......<br /><br />===================================================<br /><br />学习无止境~<img src ="http://www.blogjava.net/wqhtomcat/aggbug/85974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wqhtomcat/" target="_blank">wqhtomcat</a> 2006-12-06 23:09 <a href="http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java5范型研究</title><link>http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85961.html</link><dc:creator>wqhtomcat</dc:creator><author>wqhtomcat</author><pubDate>Wed, 06 Dec 2006 14:27:00 GMT</pubDate><guid>http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85961.html</guid><wfw:comment>http://www.blogjava.net/wqhtomcat/comments/85961.html</wfw:comment><comments>http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wqhtomcat/comments/commentRss/85961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wqhtomcat/services/trackbacks/85961.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">范型的实现原理：</span>
				<span lang="EN-US">Java </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语言中的泛型基本上完全在编译器中实现，由编译器执行类型检查和类型推断，然后生成普通的非泛型的字节码。这种实现技术称为擦除（</span>
				<span lang="EN-US">erasure</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）（编译器使用泛型类型信息保证类型安全，然后在生成字节码之前将其清除），所以说其实</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的所谓的范型知识形式上的，仅仅是在编译期做了手脚，生成了一些标明范型的变量，应为这些都是编译期的行为，那么引用</span>
				<span lang="EN-US">buaawhl</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一句话就是说：</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只能支持</span>
				<span lang="EN-US">Field, Method</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">generic type</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">信息，这些信息存放在</span>
				<span lang="EN-US">class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的</span>
				<span lang="EN-US">contant pool</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，作为字符串常量出现，标志是</span>
				<span lang="EN-US">signature</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				<br />
				<br />
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">范型的实现采用的是</span>
				<span lang="EN-US">Erasure</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式，仅仅是在编译期进行检查，所以在运行过程中我们就不能进行范型的实例化，因为我们不知道到底要实例化什么类型的对象，与原来我们手动进行强制类型转换的一样，我们如果知道我们能够转换成什么对象，那么我们就可以将我们知道的类型的信息传递过去，也就是吧</span>
				<span lang="EN-US">XX.class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传递过去，这样</span>
				<span lang="EN-US">jvm</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就知道我们要实例化什么样的对象了。<br /></span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">3、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原来</span>
				<span lang="EN-US">Class&lt;T&gt; </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示的是一个范型的</span>
				<span lang="EN-US">Class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类啊，为什么搞的像</span>
				<span lang="EN-US">List&lt;T&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">样式的范型声明呢？搞得我迷糊了好长时间，一致以为是一个类似容器的东西呢，这个语法感觉到有些奇怪，见笑了：），这个类一般用来接受</span>
				<span lang="EN-US">XX.class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">返回的对象。</span>
				<br />
				<br />
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">4、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要想在</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中范型用得爽，还得配合使用反射才行啊。由于</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采用了擦拭法进行范型的支持，所以我们依旧不能在运行期获取到具体的类型的信息，而至能够在我们进行设计的时候对其类型信息进行指定，那么我们指定的类型的信息就可以存放在编译后生成的</span>
				<span lang="EN-US">class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中了，我们可以通过反射来获取到具体的存放的信息，要获取到动态的传入的信息就不行了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<br />如下所示：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义一个超类：<br /></span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080">1</span>
				<img id="Codehighlighter1_42_45_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_45_Open_Text.style.display='none'; Codehighlighter1_42_45_Closed_Image.style.display='inline'; Codehighlighter1_42_45_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_42_45_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_45_Closed_Text.style.display='none'; Codehighlighter1_42_45_Open_Image.style.display='inline'; Codehighlighter1_42_45_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> SuperClass</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">T </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> Number</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> </span>
				<span id="Codehighlighter1_42_45_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_42_45_Open_Text">
						<span style="COLOR: #000000">{ <br /></span>
						<span style="COLOR: #008080">2</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000"> <br /></span>
				<span style="COLOR: #008080">3</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">再定义一个子类：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.lang.reflect.ParameterizedType; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_101_744_Open_Image" onclick="this.style.display='none'; Codehighlighter1_101_744_Open_Text.style.display='none'; Codehighlighter1_101_744_Closed_Image.style.display='inline'; Codehighlighter1_101_744_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_101_744_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_101_744_Closed_Text.style.display='none'; Codehighlighter1_101_744_Open_Image.style.display='inline'; Codehighlighter1_101_744_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> MyTest</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">T</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> SuperClass</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">Integer</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> </span>
				<span id="Codehighlighter1_101_744_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_101_744_Open_Text">
						<span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> Class clazz </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000"> ; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_171_612_Open_Image" onclick="this.style.display='none'; Codehighlighter1_171_612_Open_Text.style.display='none'; Codehighlighter1_171_612_Closed_Image.style.display='inline'; Codehighlighter1_171_612_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_171_612_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_171_612_Closed_Text.style.display='none'; Codehighlighter1_171_612_Open_Image.style.display='inline'; Codehighlighter1_171_612_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> printClassInf()</span>
						<span id="Codehighlighter1_171_612_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_171_612_Open_Text">
								<span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       System. out .println( </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000"> .getClass().getName()); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       System. out .println( </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000"> .getClass().getTypeParameters()[</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">].getName()); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       System. out .println( </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000"> .getClass().getSuperclass().getTypeParameters()[</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">].getName()); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       clazz </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">(Class) ((ParameterizedType) </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000"> .getClass().getGenericSuperclass()).getActualTypeArguments()[</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">]; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       String out </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> clazz .getName(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       System. out .println(out); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_658_740_Open_Image" onclick="this.style.display='none'; Codehighlighter1_658_740_Open_Text.style.display='none'; Codehighlighter1_658_740_Closed_Image.style.display='inline'; Codehighlighter1_658_740_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_658_740_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_658_740_Closed_Text.style.display='none'; Codehighlighter1_658_740_Open_Image.style.display='inline'; Codehighlighter1_658_740_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> main(String[] args)</span>
						<span id="Codehighlighter1_658_740_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_658_740_Open_Text">
								<span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       MyTest test </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> MyTest</span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">Shit</span>
								<span style="COLOR: #000000">&gt;</span>
								<span style="COLOR: #000000">(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       test.printClassInf(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<br />那么我们只能够获得我们实现定义好的要传入到</span>
				<span lang="EN-US">SuperClass</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类中的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">Integer</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">类型的范型信息，而不能得到我们在程序中传入的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">Shit</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">类的类型信息，因为</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">java</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">范型的信息不记录的实例中，仅仅在类中进行了记录（这点感觉</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">java</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">的范型还不够成熟，可能因为要向后兼容等原因吧）。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参考资料：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://www.duduwolf.com/wiki/2006/51.html">http://www.duduwolf.com/wiki/2006/51.html</a>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://calvin.javaeye.com/blog/33139">http://calvin.javaeye.com/blog/33139</a>
						<span style="mso-spacerun: yes">   </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">白衣的</span>
				<span lang="EN-US">SpringSide</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中对范型使用的说明</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://www-128.ibm.com/developerworks/cn/java/j-jtp01255.html">http://www-128.ibm.com/developerworks/cn/java/j-jtp01255.html</a>
						<span style="mso-spacerun: yes">  </span>Java </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">理论和实践关于范型的讲解</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://www.nirvanastudio.org/java/dont-repeat-the-dao.html">http://www.nirvanastudio.org/java/dont-repeat-the-dao.html</a>
						<span style="mso-spacerun: yes">  </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">范型实现可重用</span>
				<span lang="EN-US">DAO</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的文章</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/reflect/ParameterizedType.html#getActualTypeArguments()">http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/reflect/ParameterizedType.html#getActualTypeArguments()</a>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://buaawhl.javaeye.com/blog/22020">http://buaawhl.javaeye.com/blog/22020</a>
						<span style="mso-spacerun: yes">  </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">范型的实现原理，讲的比较清楚</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
<img src ="http://www.blogjava.net/wqhtomcat/aggbug/85961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wqhtomcat/" target="_blank">wqhtomcat</a> 2006-12-06 22:27 <a href="http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>你的团队够高效吗？</title><link>http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85837.html</link><dc:creator>wqhtomcat</dc:creator><author>wqhtomcat</author><pubDate>Wed, 06 Dec 2006 06:19:00 GMT</pubDate><guid>http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85837.html</guid><wfw:comment>http://www.blogjava.net/wqhtomcat/comments/85837.html</wfw:comment><comments>http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wqhtomcat/comments/commentRss/85837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wqhtomcat/services/trackbacks/85837.html</trackback:ping><description><![CDATA[软件开发离不开团队的建设，一个好的团队能够培养和带动一批人，并且能够使团队成员能够更加热爱这个团队，让每个人都能感觉到自己的价值所在，为了能够达到这样一个目的，我们应该有相应的手段或者策略来进行团队的管理和促进，不知道大家有没有适合自己团队的建设方案，这里我仅仅谈一谈我的一些看法和建议（呵呵，想到什么地方就说到什么地方吧，仅仅是表达自己的一些看法，可能有些不是太清晰，随着感悟的增多还会持续的对其进行修改），希望能够与在这方面有经验的朋友能够进行交流。<br /><br />1、团队的文化。听着好像很大，又是一顶大帽子，空而无味，不过这个确实是必不可少的。有时候团队的文化并不是谁能够说的算的，他和团队的成员，团队的气氛以及团队的方向有着直接的关系。<br /><br />2、团队的学习气氛。这里我想发表一下自己的观点，我比较主张的是知识共享型的团队学习气氛，大家各有所长，能够相互交流，相互帮助，形成一种定期交流技术的氛围，在这一点上，一个团队的主要负责人应该起到领导和推进的作用，比如说，可以让团队的成员将自己感兴趣的技术汇报上来，然后进行归类整理，可以在项目的技术考察期进行技术研究的任务分配，如果能够有足够的人手进行Pair研究是最好的了，然后进行技术的交流和培训，使团队中的每个人都能够有一种参与感和成就感。<br /><br />3、团队共享知识平台。人见多了，很容易就碰上觉得十分相似的人，程序写多了，相似的程序也就很常见了，呵呵，这就是我们常说的软件的复用，但是真正能够进行完全照搬的复用的情况很少，大部分还是需要感觉实际的情况进行调整和优化的，然而我觉得思想的复用或者相关知识的复用是很常见的。比如说团队内部有人已经对Log技术进行了比较深入的研究，可能大家还都不知道，而另外一为成员也想对该技术进行一些研究，但是他却不知道他的队友已经对其进行了比较全面的研究，这时候我们采取的方式一般都是利用搜索引擎进行相关信息的搜索，然后进行知识收集和整理，这样存在的一个问题就是，我们不能和文章的作者进行有效及时的交流。如果们有了一个知识共享的平台，那么我们就可以在这个平台上找到我们团队中对其掌握较好的人员，然后进行更加直接有效的交流。共享平台的方式可以采用团队内部的Blog或者Wiki等<br /><br />未完待续......<img src ="http://www.blogjava.net/wqhtomcat/aggbug/85837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wqhtomcat/" target="_blank">wqhtomcat</a> 2006-12-06 14:19 <a href="http://www.blogjava.net/wqhtomcat/archive/2006/12/06/85837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LOG4J原理以及配置的研究</title><link>http://www.blogjava.net/wqhtomcat/archive/2006/12/05/85702.html</link><dc:creator>wqhtomcat</dc:creator><author>wqhtomcat</author><pubDate>Tue, 05 Dec 2006 14:32:00 GMT</pubDate><guid>http://www.blogjava.net/wqhtomcat/archive/2006/12/05/85702.html</guid><wfw:comment>http://www.blogjava.net/wqhtomcat/comments/85702.html</wfw:comment><comments>http://www.blogjava.net/wqhtomcat/archive/2006/12/05/85702.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wqhtomcat/comments/commentRss/85702.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wqhtomcat/services/trackbacks/85702.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原理以及配置的研究</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在进行</span>
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的使用过程中，我对下面的两个问题比较敏感：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是如何进行工作的？</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这是在</span>
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">项目中对</span>
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的介绍中的一段话</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">With log4j it is possible to enable logging at runtime without modifying the application binary. The log4j package is designed so that these statements can remain in shipped code without incurring a heavy performance cost. Logging behavior can be controlled by editing a configuration file, without touching the application binary.</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于</span>
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的具体如何进行工作的原理，在</span>
				<span lang="EN-US">javaeye</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上</span>
				<span lang="EN-US">buaawhl</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">给出了一个解释：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://buaawhl.javaeye.com/blog/6450">http://buaawhl.javaeye.com/blog/6450</a>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<strong>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">总结一下就是利用</span>
						<span lang="EN-US">JDK</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的</span>
						<span lang="EN-US">new Throwable().getStackTrace() </span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法返回当前运行栈的结构层次，然后对返回的调用栈的信息进行分析，找到调用该类的类的名称。（也就是Log4J自己说的Runtime期间实现Log）</span>
				</strong>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于在</span>
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中<strong>只存在一个根</strong></span>
				<span lang="EN-US">
						<strong>Logger</strong>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并且</span>
				<span lang="EN-US">Logger</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之间<strong>存在继承的关系</strong>，并且我们可以<strong>在配置文件（</strong></span>
				<strong>
						<span lang="EN-US">log4J.proerties</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者</span>
						<span lang="EN-US">XML</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）中进行配置，可以初始化指定的</span>
						<span lang="EN-US">Logger</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并且对指定的</span>
						<span lang="EN-US">Logger</span>
				</strong>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<strong>进行一些相关的配置</strong>，如设置如何进行输出，以及如何将输出进行布局。并且由于</span>
				<span lang="EN-US">Logger</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之间会存在继承的关系（会找一个最近的</span>
				<span lang="EN-US">Logger</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行继承，如果没有就以根</span>
				<span lang="EN-US">Logger</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为父类，共享父类的配置信息），以及父子类之间初始化没有先后的顺序，所以我们可以在配置文件中，对各个程序以及不同的包中使用到</span>
				<span lang="EN-US">Log4j</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">Log</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">纪录方式进行配置。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<strong>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果在同一个</span>
						<span lang="EN-US">APPLICATION</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对相同名称的</span>
						<span lang="EN-US">Logger</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行调用，那么只会返回一个</span>
						<span lang="EN-US">Logger</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实例。</span>
				</strong>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会不会对系统的性能造成大的影响？</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这是对</span>
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">性能的一些描述，看来还是不错的，呵呵，在调整一下</span>
				<span lang="EN-US">Log</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的等级就可以了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">On an AMD Duron clocked at 800Mhz running JDK 1.3.1, it costs about 5 nanoseconds to determine if a logging statement should be logged or not. Actual logging is also quite fast, ranging from 21 microseconds using the SimpleLayout, 37 microseconds using the TTCCLayout. The performance of the PatternLayout is almost as good as the dedicated layouts, except that it is much more flexible.</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注：对于</span>
				<span lang="EN-US">Common Logging </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US"> Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的关系可以参见</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（其实</span>
				<span lang="EN-US">JCL</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个规范，对一些</span>
				<span lang="EN-US">Log</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工具进行了包装，我们常会使用到的具体实现还是</span>
				<span lang="EN-US">Log4j</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，当然也可以使用其他的实现）</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://hedong.3322.org/archives/000316.html">http://hedong.3322.org/archives/000316.html</a>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参考资料：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://www-128.ibm.com/developerworks/cn/java/l-log4j/index.html">http://www-128.ibm.com/developerworks/cn/java/l-log4j/index.html</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span>
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行日志操作</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://zooo.51.net/heavyz_cs/notebook/log4j.html">http://zooo.51.net/heavyz_cs/notebook/log4j.html</a> Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">学习笔记（推荐）</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://www.dingl.com/view.shtml?xh=485">http://www.dingl.com/view.shtml?xh=485</a> log4j</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://hedong.3322.org/archives/000193.html">http://hedong.3322.org/archives/000193.html</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">竹笋炒肉的</span>
				<span lang="EN-US">Log4J</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">学习笔记</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://forum.springside.org.cn/redirect.php?fid=3&amp;tid=382&amp;goto=nextoldset">http://forum.springside.org.cn/redirect.php?fid=3&amp;tid=382&amp;goto=nextoldset</a> SpringSide</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对</span>
				<span lang="EN-US">Log4j</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的使用要点</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
<img src ="http://www.blogjava.net/wqhtomcat/aggbug/85702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wqhtomcat/" target="_blank">wqhtomcat</a> 2006-12-05 22:32 <a href="http://www.blogjava.net/wqhtomcat/archive/2006/12/05/85702.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应该规划一下了~</title><link>http://www.blogjava.net/wqhtomcat/archive/2006/12/05/85664.html</link><dc:creator>wqhtomcat</dc:creator><author>wqhtomcat</author><pubDate>Tue, 05 Dec 2006 12:04:00 GMT</pubDate><guid>http://www.blogjava.net/wqhtomcat/archive/2006/12/05/85664.html</guid><wfw:comment>http://www.blogjava.net/wqhtomcat/comments/85664.html</wfw:comment><comments>http://www.blogjava.net/wqhtomcat/archive/2006/12/05/85664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wqhtomcat/comments/commentRss/85664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wqhtomcat/services/trackbacks/85664.html</trackback:ping><description><![CDATA[进入程序员生活的日子虽然不多，但是既然已经踏入了这个门槛，并且还要靠这个吃饭，那真的还得需要自己再好好的考虑一下了。<br /><br />甭管怎么说，我们要做一行爱一行，只有培养了这种踏踏实实的精神，才有可能在其他的领域获得成功，不然，一切都是惘然，没有什么可说的。<br /><br />话到这份上了，也就需要自己斟酌一下了，感觉前一段时间自己的心态十分不好，总是特别的浮躁，静不下来，再加上工作的事情也搞得自己有些焦头烂额了，现在是需要反思的时候了。别总是去干一些自己不应该干的事情，还是应该好好的把心思放在提高自己的水平上，不要把自己搞的太低，什么事情只要用心，总会有收获的。Bless myself！<br /><br />下面对于学习方面：<br /><br />1、要做到看书学习的时候要进行深入的思考，不然的话就等于没看，什么都没有印象和收获，要培养自己思考后做记录的习惯（现在忘性太大了，总是原来看过的东西就记不起来了，不过看到原来的记录还是能回想起来的）。<br /><br />2、踏踏实实的把自己作为一个java方面Web开发人员所应该精通的知识真正的精通起来，不懂就问，别搞个模棱两可，这样对一些系统在设计上会有很不好的影响，因为有些东西你想不到。<br /><br />3、提高自己的英语水平，不要总是有抵触心里，英语是程序员成长道路上必不可少的工具，只有英语能够用了，才能够更快的接触到国外的先进的知识和经验，以保持自己的知识水平。<br /><br />注：主要进行研究的内容包括（Java核心技术、Hibernate、Spring、Struts、WebWork以及Web开发的相关技术，在学习和总结后要留下文档以便备忘！）<img src ="http://www.blogjava.net/wqhtomcat/aggbug/85664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wqhtomcat/" target="_blank">wqhtomcat</a> 2006-12-05 20:04 <a href="http://www.blogjava.net/wqhtomcat/archive/2006/12/05/85664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库设计备忘录</title><link>http://www.blogjava.net/wqhtomcat/archive/2006/09/12/69134.html</link><dc:creator>wqhtomcat</dc:creator><author>wqhtomcat</author><pubDate>Tue, 12 Sep 2006 05:23:00 GMT</pubDate><guid>http://www.blogjava.net/wqhtomcat/archive/2006/09/12/69134.html</guid><wfw:comment>http://www.blogjava.net/wqhtomcat/comments/69134.html</wfw:comment><comments>http://www.blogjava.net/wqhtomcat/archive/2006/09/12/69134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wqhtomcat/comments/commentRss/69134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wqhtomcat/services/trackbacks/69134.html</trackback:ping><description><![CDATA[数据库设计备忘录，没什么新鲜的，只是作为自己的一个备忘~<br />1、关系： 1：1，1：N，N：N<br />2、注意在使用多对多关系的时候，由于关系型数据库的限制，我们必须建立一个中间表，用来表明两者之间的关系<br />3、具体的原因是数据库中的表的主键应该是唯一的，但是如果在两个存在多对多关系的数据表之间表明两者之间的关系的话，就不能够保证数据主键的唯一性了，比如说：书籍和作者之间的关系，我们假设他们之间是多对多的关系，一本书籍可以有多个作者，一个作者可以写多本书籍，如果我们是用两个表来表明他们之间的关系，结构如下：<br /><br /><br />书籍表：<br /><br />主键    作者外键    名称 等其它属性<br /><br />作者表：<br /><br />主键   书籍外键  姓名等其它属性<br /><br />如果我们要向表中存入数据，那么就会如下所示：<br /><br />书籍表：<br /><br />1            1           应用Rails进行敏捷Web开发<br />1            2           应用Rails进行敏捷Web开发<br /><br />作者表：<br /><br />1            1            Dave Thomas<br />2            1            David Heinemeier Hansson<br /><br />这样就出现问题了，书籍表中出现了重复的主键，这个可是不行的哦<br /><br />如果加入一个中间连接表，那么问题就解决了，书籍表和作者表只管负责存储他们各自的信息，不需要存储他们的关系信息，关系信息让连接表进行存储就好了~，表的结构如下：<br />书籍表：<br /><br />主键     名称 等其它属性<br />1             应用Rails进行敏捷Web开发<br />2             Ant使用手册<br /><br />作者表：<br /><br />主键     姓名等其它属性<br />1                    Dave Thomas<br />2                David Heinemeier Hansson<br /><br />连接表：<br /><br />主键      书籍外键   作者外键<br />1                      1              1<br />2                      1              2<br /><br />这样，问题就解决了~<img src ="http://www.blogjava.net/wqhtomcat/aggbug/69134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wqhtomcat/" target="_blank">wqhtomcat</a> 2006-09-12 13:23 <a href="http://www.blogjava.net/wqhtomcat/archive/2006/09/12/69134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>