﻿<?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-Crazy For You</title><link>http://www.blogjava.net/yejiansuo/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 10:46:41 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 10:46:41 GMT</pubDate><ttl>60</ttl><item><title>设计模式_单例模式_Singleton Pattern</title><link>http://www.blogjava.net/yejiansuo/archive/2010/10/18/335452.html</link><dc:creator>叶建锁</dc:creator><author>叶建锁</author><pubDate>Mon, 18 Oct 2010 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/yejiansuo/archive/2010/10/18/335452.html</guid><description><![CDATA[SINGLETON<br />
<br />
单例模式 ：&nbsp;<br />
(1) Eager 饿汉模式 : 仅适用于 Java&nbsp; ；&nbsp;<br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liuwentao253/2008-12-08-7.jpg" /><br />
<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_28_364_Open_Image" onclick="this.style.display='none'; Codehighlighter1_28_364_Open_Text.style.display='none'; Codehighlighter1_28_364_Closed_Image.style.display='inline'; Codehighlighter1_28_364_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_28_364_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_28_364_Closed_Text.style.display='none'; Codehighlighter1_28_364_Open_Image.style.display='inline'; Codehighlighter1_28_364_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;EagerSingleton&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_28_364_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_28_364_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">类被加载时，静态变量就被初始化</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;EagerSingleton&nbsp;ourInstance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EagerSingleton();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_127_190_Open_Image" onclick="this.style.display='none'; Codehighlighter1_127_190_Open_Text.style.display='none'; Codehighlighter1_127_190_Closed_Image.style.display='inline'; Codehighlighter1_127_190_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_127_190_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_127_190_Closed_Text.style.display='none'; Codehighlighter1_127_190_Open_Image.style.display='inline'; Codehighlighter1_127_190_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_127_190_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_127_190_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;外界只能通过此方法获得自身的实例<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;SingletonDemo<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_239_273_Open_Image" onclick="this.style.display='none'; Codehighlighter1_239_273_Open_Text.style.display='none'; Codehighlighter1_239_273_Closed_Image.style.display='inline'; Codehighlighter1_239_273_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_239_273_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_239_273_Closed_Text.style.display='none'; Codehighlighter1_239_273_Open_Image.style.display='inline'; Codehighlighter1_239_273_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;EagerSingleton&nbsp;getInstance()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_239_273_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_239_273_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;ourInstance;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_280_325_Open_Image" onclick="this.style.display='none'; Codehighlighter1_280_325_Open_Text.style.display='none'; Codehighlighter1_280_325_Closed_Image.style.display='inline'; Codehighlighter1_280_325_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_280_325_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_280_325_Closed_Text.style.display='none'; Codehighlighter1_280_325_Open_Image.style.display='inline'; Codehighlighter1_280_325_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_280_325_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_280_325_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;构造函数对外不可见<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;单例模式最显著的特点<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_356_362_Open_Image" onclick="this.style.display='none'; Codehighlighter1_356_362_Open_Text.style.display='none'; Codehighlighter1_356_362_Closed_Image.style.display='inline'; Codehighlighter1_356_362_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_356_362_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_356_362_Closed_Text.style.display='none'; Codehighlighter1_356_362_Open_Image.style.display='inline'; Codehighlighter1_356_362_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;EagerSingleton()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_356_362_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_356_362_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
<br />
<br />
(2) Lazy 懒汉模式 ： 适用于Java,C++ （因为static 代码块的执行顺序c++不固定，java是固定的，在构造方法之前)<br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liuwentao253/2008-12-08-8.jpg" /><br />
<br />
<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_27_456_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_456_Open_Text.style.display='none'; Codehighlighter1_27_456_Closed_Image.style.display='inline'; Codehighlighter1_27_456_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_27_456_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_27_456_Closed_Text.style.display='none'; Codehighlighter1_27_456_Open_Image.style.display='inline'; Codehighlighter1_27_456_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;LazySingleton&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_27_456_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_27_456_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">类被加载时，静态变量不会被初始化</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;LazySingleton&nbsp;lazySingleton&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_112_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_112_171_Open_Text.style.display='none'; Codehighlighter1_112_171_Closed_Image.style.display='inline'; Codehighlighter1_112_171_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_112_171_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_112_171_Closed_Text.style.display='none'; Codehighlighter1_112_171_Open_Image.style.display='inline'; Codehighlighter1_112_171_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_112_171_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_112_171_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;默认构造函数&nbsp;是&nbsp;private<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;防止外界调用，同时此类也不能被继承<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_200_207_Open_Image" onclick="this.style.display='none'; Codehighlighter1_200_207_Open_Text.style.display='none'; Codehighlighter1_200_207_Closed_Image.style.display='inline'; Codehighlighter1_200_207_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_200_207_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_200_207_Closed_Text.style.display='none'; Codehighlighter1_200_207_Open_Image.style.display='inline'; Codehighlighter1_200_207_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;LazySingleton()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_200_207_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_200_207_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_214_264_Open_Image" onclick="this.style.display='none'; Codehighlighter1_214_264_Open_Text.style.display='none'; Codehighlighter1_214_264_Closed_Image.style.display='inline'; Codehighlighter1_214_264_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_214_264_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_214_264_Closed_Text.style.display='none'; Codehighlighter1_214_264_Open_Image.style.display='inline'; Codehighlighter1_214_264_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_214_264_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_214_264_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;synchronized&nbsp;：同步化<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_324_454_Open_Image" onclick="this.style.display='none'; Codehighlighter1_324_454_Open_Text.style.display='none'; Codehighlighter1_324_454_Closed_Image.style.display='inline'; Codehighlighter1_324_454_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_324_454_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_324_454_Closed_Text.style.display='none'; Codehighlighter1_324_454_Open_Image.style.display='inline'; Codehighlighter1_324_454_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;LazySingleton&nbsp;getInstance()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_324_454_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_324_454_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_359_418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_359_418_Open_Text.style.display='none'; Codehighlighter1_359_418_Closed_Image.style.display='inline'; Codehighlighter1_359_418_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_359_418_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_359_418_Closed_Text.style.display='none'; Codehighlighter1_359_418_Open_Image.style.display='inline'; Codehighlighter1_359_418_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(lazySingleton&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_359_418_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_359_418_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lazySingleton&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LazySingleton();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;lazySingleton;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
<br />
<img src ="http://www.blogjava.net/yejiansuo/aggbug/335452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yejiansuo/" target="_blank">叶建锁</a> 2010-10-18 14:09 <a href="http://www.blogjava.net/yejiansuo/archive/2010/10/18/335452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 之BeanFactory</title><link>http://www.blogjava.net/yejiansuo/archive/2010/10/18/335442.html</link><dc:creator>叶建锁</dc:creator><author>叶建锁</author><pubDate>Mon, 18 Oct 2010 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/yejiansuo/archive/2010/10/18/335442.html</guid><description><![CDATA[<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-size: 8pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="z-index: 1; position: absolute; margin-top: 100px; width: 170px; height: 85px; margin-left: 60px; left: 0px"><span style="font-family: Arial"></span></span><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 8pt"><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">是</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Spring</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的&#8220;心脏&#8221;。它就是</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Spring&nbsp;IoC</span></span></span><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">容器的真面目。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Spring</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">使用</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">来<span style="color: red"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">实例化、配置和管理</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span></span></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">。但是，在大多数情况我们并不直接使用</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">，而是使用</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">ApplicationContext</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">。它也是</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span></span></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 8pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'">的一个实<br />
<br />
现，但是它添加了一系列&#8220;框架&#8221;的特征，比如：<span style="color: red">国际化支持、资源访问、事件传播</span>等。<br />
</span></span><br />
<br />
<br />
</span></span></span></span></span></span></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 8pt"><span style="font-size: 8pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/yejiansuo/3.jpg" width="371" height="107" /></span></span></span></span></span></span></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p><span style="font-family: Arial"></span></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p><span style="font-family: Arial"></span></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p><span style="font-family: Arial"></span></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 8pt"><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">其实是一个接口－</span><span style="font-family: 'Times New Roman'; color: red; font-size: 10.5pt; mso-spacerun: 'yes'">org.springframework.beans.factory.BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">，它可以配置和管理几乎所有的</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Java</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">类。当然，具体的工作是由实现</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">接口<br />
<br />
的实现类完成。我们最常用的</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">实现是</span><span style="font-family: 'Times New Roman'; color: red; font-size: 10.5pt; mso-spacerun: 'yes'">org.springframework.beans.factory.xml.XmlBeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">。它从</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">XML</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">文件中读取</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的定义信息。当</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">被创建<br />
<br />
时，</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Spring</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">验证每个</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的配置。当然，要等</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">创建之后才能设置</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的属性。单例</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">(Singleton)Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">在启动时就会被</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">实例化，其它的</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">在请求时创建。根<br />
<br />
据</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Java</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">文档（</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Javadocs</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">）介绍，&#8220;</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">定义的持久化方式没有任何的限制：</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">LDAP</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">、</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">RDBMS</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">、</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">XML</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">、属性文件，等等&#8221;。现在</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Spring</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">已提供了</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">XML</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">文件和<br />
<br />
属性文件的实现。无疑，</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">XML</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">文件是定义</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span></span></span><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的最佳方式。<br />
<br />
<br />
</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></span></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 8pt"><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">是初始化</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span></span></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><span style="font-size: 10pt"><span style="font-size: 10pt">和调用它们生命周期方法的&#8220;吃苦耐劳者&#8221;。</span></span><span style="color: red"><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 8pt"><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">注意，</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">只能管理单例（</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Singleton</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">）</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的生命周期。它不能管理原型</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">(prototype,</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">非单<br />
<br />
例</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">)Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的生命周期。这是因为原型</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">实例被创建之后便被传给了客户端</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">,</span></span></span><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">容器失去了对它们的引用。<br />
<br />
<br />
</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 8pt"><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: 'Times New Roman'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'">管理</span><span style="font-family: 'Times New Roman'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'">Bean</span></span></span><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: '宋体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'">（组件）的生命周期<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></span></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 8pt"><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下图描述了</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的生命周期。它是由</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">IoC</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">容器控制。</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">IoC</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">容器定义</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">操作的规则，即</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的定义（</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanDefinition</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">）。</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">的定义包含了</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">在创建</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">实<br />
<br />
例时需要的所有信息。</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">BeanFactory</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">首先通过构造函数创建一个</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">实例，之后它会执行</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">实例的一系列之前初始化动作，初始化结束</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">将进入准备就绪（</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">ready</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">）<br />
<br />
状态，这时应用程序就可以获取这些</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">实例了。最后，当你销毁单例（</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Singleton</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">）</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">时，它会调用相应的销毁方法，结束</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">Bean</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">实例的生命周期。</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></span></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p><span style="font-family: Arial"></span></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p><span style="font-family: Arial"></span></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 8pt"><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/yejiansuo/4.jpg" /></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></span></span></p>
<img src ="http://www.blogjava.net/yejiansuo/aggbug/335442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yejiansuo/" target="_blank">叶建锁</a> 2010-10-18 13:26 <a href="http://www.blogjava.net/yejiansuo/archive/2010/10/18/335442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是控制反转/依赖注入？</title><link>http://www.blogjava.net/yejiansuo/archive/2010/10/18/335440.html</link><dc:creator>叶建锁</dc:creator><author>叶建锁</author><pubDate>Mon, 18 Oct 2010 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/yejiansuo/archive/2010/10/18/335440.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;控制反转（IoC=Inversion of Control）IoC，用白话来讲，就是由容器控制程序之间的（依赖）关系，而非传统实现中，由程序代码直接操控。这也就是所谓&#8220;控制反转&#8221;的概念所在：（依赖）控制权由应用代码中转到了外部容器，控制权的转移，是所谓反转。&nbsp;&nbsp;&nbsp;&nbsp;IoC也称为好...&nbsp;&nbsp;<a href='http://www.blogjava.net/yejiansuo/archive/2010/10/18/335440.html'>阅读全文</a><img src ="http://www.blogjava.net/yejiansuo/aggbug/335440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yejiansuo/" target="_blank">叶建锁</a> 2010-10-18 12:53 <a href="http://www.blogjava.net/yejiansuo/archive/2010/10/18/335440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring AOP处理日志 </title><link>http://www.blogjava.net/yejiansuo/archive/2010/10/17/335347.html</link><dc:creator>叶建锁</dc:creator><author>叶建锁</author><pubDate>Sun, 17 Oct 2010 03:26:00 GMT</pubDate><guid>http://www.blogjava.net/yejiansuo/archive/2010/10/17/335347.html</guid><description><![CDATA[<span style="font-family: Arial; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AOP正在成为软件开发的下一个圣杯。使用AOP，你可以将处理aspect的代码注入主程序， 通常主程序的主要目的并不在于处理这些aspect。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AOP可以防止代码混乱。 为了理解AOP 如何做到这点，考虑一下记日志的工作。日志本身不太可能是你开发的主程序的主要任务。 如果能将&#8220;不可见的&#8221;、通用的日志代码注入主程序中，那该多好啊。AOP可以帮助你做到。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Spring framework是很有前途的AOP技术。作为一种非侵略性的，轻型的AOP framework，你无需使用预编译器或其他的元标签，便可以在Java程序中使用它。这意味着开发团队里只需 一人要对付AOP framework，其他人还是象往常一样编程。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AOP是很多直觉难以理解的术语的根源。幸运的是，你只要理解三个概念，就可以编写AOP模块。这三个概念是：advice，pointcut和advisor。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; advice是你想向别的程序内部不同的地方注入的代码。pointcut定义了需要注入advice的位置，通常是某个特定的类的一个public方法。advisor是pointcut和advice的装配器，是将advice注入主程序中预定义位置的代码。 </p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 既然我们知道了需要使用advisor向主要代码中注入&#8220;不可见的&#8221;advice，让我们实现一个Spring AOP的例子。 在这个例子中，我们将实现一个before advice，这意味着advice的代码在被调用的public方法开始前被执行。 以下是这个before advice的实现代码： </p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.company.springaop.test;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.Method;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.aop.MethodBeforeAdvice;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img id="Codehighlighter1_185_568_Open_Image" onclick="this.style.display='none'; Codehighlighter1_185_568_Open_Text.style.display='none'; Codehighlighter1_185_568_Closed_Image.style.display='inline'; Codehighlighter1_185_568_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_185_568_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_185_568_Closed_Text.style.display='none'; Codehighlighter1_185_568_Open_Image.style.display='inline'; Codehighlighter1_185_568_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestBeforeAdvice&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;MethodBeforeAdvice&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_185_568_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_185_568_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这里还有after，Exception，around等Advice</span><span style="color: #008000"><br />
<img id="Codehighlighter1_223_369_Open_Image" onclick="this.style.display='none'; Codehighlighter1_223_369_Open_Text.style.display='none'; Codehighlighter1_223_369_Closed_Image.style.display='inline'; Codehighlighter1_223_369_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_223_369_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_223_369_Closed_Text.style.display='none'; Codehighlighter1_223_369_Open_Image.style.display='inline'; Codehighlighter1_223_369_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" /></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_223_369_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_223_369_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />*before&nbsp;是在方法执行之前执行advice的内容，around是在方法执行之前和之后都得到了执行<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />*Exception是抛出异常的时候，可以使用aop的方法来统一处理业务的异常。<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&#215;在编程的时候，可以由专门的人处理业务的异常，其它人还是一样的编程，不用考虑业务类异常的处理。<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /></span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;before(Method&nbsp;m,&nbsp;Object[]&nbsp;args,&nbsp;Object&nbsp;target)&nbsp;<br />
<img id="Codehighlighter1_453_565_Open_Image" onclick="this.style.display='none'; Codehighlighter1_453_565_Open_Text.style.display='none'; Codehighlighter1_453_565_Closed_Image.style.display='inline'; Codehighlighter1_453_565_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_453_565_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_453_565_Closed_Text.style.display='none'; Codehighlighter1_453_565_Open_Image.style.display='inline'; Codehighlighter1_453_565_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Throwable&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_453_565_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_453_565_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这里能用反射？</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;world!&nbsp;(by&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getClass().getName()&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>接口MethodBeforeAdvice只有一个方法before需要实现，它定义了advice的实现。before方法共用三个参数，它们提供了相当丰富的信息。参数Method m是advice开始后执行的方法。方法名称可以用作判断是否执行代码的条件。Object[] args是传给被调用的public方法的参数数组。当需要记日志时，参数args和被执行方法的名称，都是非常有用的信息。你也可以改变传给m的参数，但要小心使用这个功能；编写最初主程序的程序员并不知道主程序可能会和传入参数的发生冲突。Object target是执行方法m对象的引用。 在下面的BeanImpl类中，每个public方法调用前，都会执行advice： </p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.company.springaop.test;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img id="Codehighlighter1_76_276_Open_Image" onclick="this.style.display='none'; Codehighlighter1_76_276_Open_Text.style.display='none'; Codehighlighter1_76_276_Closed_Image.style.display='inline'; Codehighlighter1_76_276_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_76_276_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_76_276_Closed_Text.style.display='none'; Codehighlighter1_76_276_Open_Image.style.display='inline'; Codehighlighter1_76_276_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BeanImpl&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Bean&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_76_276_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_76_276_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_106_273_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_273_Open_Text.style.display='none'; Codehighlighter1_106_273_Closed_Image.style.display='inline'; Codehighlighter1_106_273_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_106_273_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_106_273_Closed_Text.style.display='none'; Codehighlighter1_106_273_Open_Image.style.display='inline'; Codehighlighter1_106_273_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;theMethod()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_106_273_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_106_273_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #0000ff">this</span><span style="color: #000000">.getClass().getName()&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Exception().getStackTrace()[</span><span style="color: #000000">0</span><span style="color: #000000">].getMethodName()&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">()</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;says&nbsp;HELLO!</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p><br />
类BeanImpl实现了下面的接口Bean： </p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.company.springaop.test;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img id="Codehighlighter1_60_91_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_91_Open_Text.style.display='none'; Codehighlighter1_60_91_Closed_Image.style.display='inline'; Codehighlighter1_60_91_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_60_91_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_60_91_Closed_Text.style.display='none'; Codehighlighter1_60_91_Open_Image.style.display='inline'; Codehighlighter1_60_91_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Bean&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_60_91_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_60_91_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;theMethod();&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>&nbsp;虽然不是必须使用接口，但面向接口而不是面向实现编程是良好的编程实践，Spring也鼓励这样做。 pointcut和advice通过配置文件来实现，因此，接下来你只需编写主方法的Java代码： </p>
<p><br />
&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.company.springaop.test;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.context.ApplicationContext;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.context.support.FileSystemXmlApplicationContext;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img id="Codehighlighter1_190_523_Open_Image" onclick="this.style.display='none'; Codehighlighter1_190_523_Open_Text.style.display='none'; Codehighlighter1_190_523_Closed_Image.style.display='inline'; Codehighlighter1_190_523_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_190_523_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_190_523_Closed_Text.style.display='none'; Codehighlighter1_190_523_Open_Image.style.display='inline'; Codehighlighter1_190_523_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Main&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_190_523_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_190_523_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_235_520_Open_Image" onclick="this.style.display='none'; Codehighlighter1_235_520_Open_Text.style.display='none'; Codehighlighter1_235_520_Closed_Image.style.display='inline'; Codehighlighter1_235_520_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_235_520_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_235_520_Closed_Text.style.display='none'; Codehighlighter1_235_520_Open_Image.style.display='inline'; Codehighlighter1_235_520_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_235_520_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_235_520_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Read&nbsp;the&nbsp;configuration&nbsp;file&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext&nbsp;ctx&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileSystemXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">springconfig.xml</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Instantiate&nbsp;an&nbsp;object&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Bean&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Bean)&nbsp;ctx.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">bean</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Execute&nbsp;the&nbsp;public&nbsp;method&nbsp;of&nbsp;the&nbsp;bean&nbsp;(the&nbsp;test)&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;x.theMethod();&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>&nbsp;</p>
<p>我们从读入和处理配置文件开始，接下来马上要创建它。这个配置文件将作为粘合程序不同部分的&#8220;胶水&#8221;。读入和处理配置文件后，我们会得到一个创建工厂ctx。任何一个Spring管理的对象都必须通过这个工厂来创建。对象通过工厂创建后便可正常使用。 仅仅用配置文件便可把程序的每一部分组装起来。 </p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;&nbsp;"-//SPRING//DTD&nbsp;BEAN//EN"&nbsp;"http://www.springframework.org/dtd/spring-beans.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">CONFIG</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="bean"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.aop.framework.ProxyFactoryBean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="proxyInterfaces"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.company.springaop.test.Bean</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="target"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">local</span><span style="color: #0000ff">="beanTarget"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="interceptorNames"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">theAdvisor</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">CLASS</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="beanTarget"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.company.springaop.test.BeanImpl"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">ADVISOR</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">Note:&nbsp;An&nbsp;advisor&nbsp;assembles&nbsp;pointcut&nbsp;and&nbsp;advice</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="theAdvisor"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.aop.support.RegexpMethodPointcutAdvisor"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="advice"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">local</span><span style="color: #0000ff">="theBeforeAdvice"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="pattern"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;//pointcut?<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com\.company\.springaop\.test\.Bean\.theMethod</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">ADVICE</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="theBeforeAdvice"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.company.springaop.test.TestBeforeAdvice"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>&nbsp; </p>
<p><br />
四个bean定义的次序并不重要。我们现在有了一个advice，一个包含了正则表达式pointcut的advisor， 一个主程序类和一个配置好的接口，通过工厂ctx，这个接口返回自己本身实现的一个引用。 BeanImpl 和TestBeforeAdvice都是直接配置。我们用一个唯一的ID创建一个bean元素，并指定了一个实现类。这 就是全部的工作。advisor通过Spring framework提供的一个RegexMethodPointcutAdvisor类来实现。我 们用advisor的一个属性来指定它所需的advice-bean。第二个属性则用正则表达式定义了pointcut，确保 良好的性能和易读性。 最后配置的是bean，它可以通过一个工厂来创建。bean的定义看起来比实际上要 复杂。bean是ProxyFactoryBean的一个实现，它是Spring framework的一部分。这个bean的行为通过一下 的三个属性来定义： </p>
<p>&nbsp;</p>
<p><br />
属性proxyInterface定义了接口类。 属性target指向本地配置的一个bean，这个bean返回一个接口的实现。 属性interceptorNames是唯一允许定义一个值列表的属性。这个列表包含所有需要在beanTarget上执行的advisor。 注意，advisor列表的次序是非常重要的。 </p>
<p>&nbsp;</p>
<p>Spring工具 </p>
<p>虽然你可以手工修改Ant构建脚本，但使用SpringUI（译注：SpringUI现在是Spring framework的一部分，并改名 为spring-ide），使用Spring AOP变得很简单，只要点点鼠标即可。你可以把SpringUI安装成Eclipse的一个plug-in。 然后，你只需在你的project上右击鼠标，并选择&#8220;add Spring Project Nature&#8221;。在project属性中，你可以在&#8220;Spring Project&#8221;下添加Spring配置文件。在编译前把下面的类库加入project：aopalliance.jar，commons-logging.jar， jakarta-oro-2.0.7.jar和spring.jar。运行程序时你会看到下面的信息： </p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;(logging&nbsp;information)&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />Hello&nbsp;world</span><span style="color: #000000">!</span><span style="color: #000000">&nbsp;(by&nbsp;com.company.springaop.test.TestBeforeAdvice)&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />com.company.springaop.test.BeanImpl.theMethod()&nbsp;says&nbsp;HELLO</span><span style="color: #000000">!</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p><br />
优点和缺点 </p>
<p>Spring比起其他的framework更有优势，因为除了AOP以外，它提供了更多别的功能。 作为一个轻型framework，它在J2EE不同的部分都可以发挥作用。因此，即使不想使用Spring AOP， 你可能还是想使用Spring。另一个优点是，Spring并不要求开发团队所有的人员都会用它。 学习Spring应该从Spring reference的第一页开始。读了本文后，你应该可以更好地理解Spring reference了。 Spring唯一的缺点是缺乏更多的文档，但它的mailing list是个很好的补充，而且会不断地出现更多的文档。 </p>
</span>
<img src ="http://www.blogjava.net/yejiansuo/aggbug/335347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yejiansuo/" target="_blank">叶建锁</a> 2010-10-17 11:26 <a href="http://www.blogjava.net/yejiansuo/archive/2010/10/17/335347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>好书推荐_1 _《java优化编程》</title><link>http://www.blogjava.net/yejiansuo/archive/2010/10/16/335302.html</link><dc:creator>叶建锁</dc:creator><author>叶建锁</author><pubDate>Sat, 16 Oct 2010 11:47:00 GMT</pubDate><guid>http://www.blogjava.net/yejiansuo/archive/2010/10/16/335302.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/yejiansuo/archive/2010/10/16/335302.html'>阅读全文</a><img src ="http://www.blogjava.net/yejiansuo/aggbug/335302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yejiansuo/" target="_blank">叶建锁</a> 2010-10-16 19:47 <a href="http://www.blogjava.net/yejiansuo/archive/2010/10/16/335302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员必备的英文单词</title><link>http://www.blogjava.net/yejiansuo/archive/2010/10/15/English.html</link><dc:creator>叶建锁</dc:creator><author>叶建锁</author><pubDate>Fri, 15 Oct 2010 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/yejiansuo/archive/2010/10/15/English.html</guid><description><![CDATA[<div style="layout-grid:  15.6pt none" class="Section0">
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p15"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Conference</strong>：<span style="font-size: 12pt">讨论会，碰头会议的意思</span>&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如，有时候领导会说&#8220;咱们Call一个Conference吧&#8221;，这个的意思应该是一个电话会议，或者视频会议。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="color: #ff0000"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong>Follow</strong></span></span>：跟踪&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如，一般会说那个Case你follow一下吧，这就是说让你跟踪一下这个事情。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Team</strong>：&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是团队的意思，团队的主管一般叫Team&nbsp;Leader，一个Team可以大也可以小，一个项目小组可以叫一个Team，一个部门也可以叫做一个Team，有时候一个公司的高层领导团队也可以叫做&nbsp;是一个Team。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Policy</strong>：政策或者是策略&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;很多东西都可以制定Policy，销售的Policy，价格的Policy，网络的Policy都可以。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Open</strong>：打开的、开放的&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有时候当成一种状态来说，比如你的项目是不是Open的呢？这个的意思是说，你是不是非常听不进去别人的意见闭门造车呢？&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="color: #ff0000"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong>Share</strong></span></span>：共享&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如，把你的文档Share一下吧，有时候也说把你的想法Share一下吧。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Plan</strong>：计划、规划&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如，你有什么Plan告诉我一下，或者说，你在这件事请开始前是否已经制订了详细的Plan？Plan是每一件事的行动方案和地图。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="color: #ff0000"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong>Milestone</strong></span></span>：&nbsp;里程碑、阶段&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如，请你把每一个Milestone共享出来，就是说让每一个人都知道你项目的进度状况。Milestone就是每一个进展阶段的结束。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Product</strong>：&nbsp;产品&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;产品就是一个公司的用于销售而生产的物品，Product有时候也可以代表一个部门，比如&#8220;产品部&#8221;。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="color: #ff0000"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong>Project</strong></span></span>：&nbsp;项目&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般项目是需要在公司立项的，如果没有立项一般都不能称作一个正式的项目，在立项以后每一个项目都会任命一个项目经理作为这个项目的总负责人，项目经理的&nbsp;英文简称是PM。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Boss</strong>：老板&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们有时候一提到Boss总是想到的是这个公司的实际控股人，也就是公司里最大的那个领导，其实不尽然，这里面所说的老板并不是整个公司的老板，而指得是&nbsp;你的上级，一般将你的上级也叫做Boss。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="color: #ff0000"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong>Close</strong></span></span>：关闭&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close有时候描述某些事情的状态，比如说，&#8220;这个事情已经Close了&#8221;，意思是说这件事情已经了结了，这个和&#8220;finish&#8221;的意思是不一样&nbsp;的，finish是完成了，而Close是关闭了。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="color: #ff0000"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong>Manager</strong></span></span>：经理&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;到了工作单位以后，你会发现在一个公司中有无数的Manager，几乎每一个人都可以叫做Manager，大大小小的Manager有很多，但却都不是领&nbsp;导，比如，负责采购的原来叫采购员，现在叫采购经理，负责销售的原来叫销售员，现在叫销售经理，客户服务的原来叫客户服务人员，现在叫客户经理，等等。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Delay</strong>：&nbsp;延迟了&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay也是一种状态，这个状态一定是和一个Plan相比较的，在Plan中设定了每一个Milestone的时间点，而在相应的时间点上没有完成那个&nbsp;Milestone的目标，那么说明这个项目Delay了。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Schedule</strong>：时间表&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有时候在规范每一个人在项目中在不同时间段应该完成的事情，可以编制一个Schedule的Excel文件，发给每一个参与项目的人员&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Update</strong>：&nbsp;更新一下&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Push</strong>：推动&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如，你Push这一下这件事，就是推动一下。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Solution</strong>：解决方案&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有时候说，给用户提供一个Total&nbsp;solution的意思是，全面的解决方案。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Announce</strong>：宣布&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如，有时候说，把你们的想法通过Email&nbsp;Announce出来，这就是说发一个群发邮件，让所有人都知道你所要表达的某些计划等等。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Interview</strong>：&nbsp;原意是接见会见的意思，但是现在面试也是这个。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Resource</strong>：资源&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong style="color: #ff0000">Review</strong>：检查一下或者回顾一下&nbsp;</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p15"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'">几个和软件开发相关的单词&nbsp;</span><span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p15"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">API</strong>：Application&nbsp;Programming&nbsp;Interface&nbsp;应用编程接口&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如，两个本来互相没有联系的系统需要数据共享，就需要开发API作为接口。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Coding</strong>：编码工作&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有时候将正式开始编码工作称作&#8220;Coding&#8221;,听起来似乎怪怪的，但实际上就是敲代码。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Document</strong>：文档&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">WebBase</strong>：Web&nbsp;应用程序&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;WebBase&#8221;从单词字面上看就是以Web为基础的意思，其实就是所谓的&#8220;B/S&#8221;结构的程序，有时候如果你和不懂技术的人交流说&#8220;B/S&#8221;他们不&nbsp;懂，你就说&#8220;WebBase&#8221;他们一定懂。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Face&nbsp;to&nbsp;face</strong>：面对面&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Hand&nbsp;by&nbsp;hand</strong>：手把手&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Step&nbsp;by&nbsp;Step</strong>：一步一步的&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Quality</strong>：质量&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8220;Quality&#8221;可以说产品的质量，也可以说是网络通信的&#8220;Quality&#8221;等。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">On-line</strong>：在线的&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有时候所谓的&#8220;On-line的客户&#8221;并不是说他们现在就在线上连接着网络或者服务器，而有时候是指这些客户是我们的正式客户。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000"><span style="color: #ff0000"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong>Handboo</strong>k</span></span></strong>：&nbsp;手册&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">License</strong>：许可证&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;经常听到&#8220;购买几个License&#8221;这样的话，&#8220;License&#8221;意思就是授权许可，有时候即使这个软件可以正常安装使用也是非法的，因为没有购买&nbsp;&#8220;License&#8221;，只有购买了&#8220;License&#8221;才可以合法使用，也就是所谓的&#8220;正版&#8221;。对于软件而言，有时候&#8220;License&#8221;并没有加密措施，完全&nbsp;是一种自觉行为。对于网络版软件而言，每一个客户端的使用都需要购买相应的&#8220;License&#8221;。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="color: #ff0000"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong>On-site</strong></span></span>：现场服务&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现场服务我们称作&#8220;On-site&#8221;服务，需要派工程师到用户的现场实施服务。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Report</strong>：报告&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;很多情况下人们把&#8220;Report&#8221;翻译成&#8220;报表&#8221;，其实&#8220;Report&#8221;本身即是名词又是动词，作为动词用到的地方也很多，比如，在一个公司中有人问&#8220;你&nbsp;report给谁？&#8221;，这句话的意思是说&#8220;你的上级主管是谁&#8221;。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong style="color: #ff0000">Version</strong>：版本&nbsp;</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p15"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'">几个常用的设备名称的单词&nbsp;</span><span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p15"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Voice&nbsp;gateway</strong>：语音网关&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Router</strong>：路由器&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">HUB</strong>：有时候已经把小的桌面级的集线器和交换机都叫HUB&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong style="color: #ff0000">Switch</strong>：&nbsp;交换机&nbsp;</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p15"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'">几个常用和商务相关的单词&nbsp;</span><span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p15"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Order</strong>：订单&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Price</strong>：价格&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">List&nbsp;price</strong>：官方报价，往往厂家会给一个折扣价，实际采购设备的价格并不是&#8220;List&nbsp;price&#8221;，&#8220;List&nbsp;price&#8221;仅仅是官方报价。&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Customer</strong>：&nbsp;客户&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Partner</strong>：合作伙伴&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Billing</strong>：计费&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong style="color: #ff0000">Marketing</strong>：市场，有时候也代表市场部门&nbsp;</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p15"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'">几种职位名称的称呼&nbsp;</span><span style="font-family: '宋体'; font-size: 12pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p15"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">CEO</strong>：Chief&nbsp;Executive&nbsp;Officer的简称，首席执行官&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">COO</strong>：Chief&nbsp;Operating&nbsp;Officer的简称，运营总裁&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">CTO</strong>：Chief&nbsp;Technology&nbsp;Officer的简称，首席技术官&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Director</strong>：总&nbsp;监&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">HR</strong>：Human&nbsp;resource的简称，人力资源部&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">CS</strong>：Customer&nbsp;service的简称，客户服务部门&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">MIS</strong>：&nbsp;公司办公网络和办公设备管理人员&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Teamleader</strong>：团队领导&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">PM</strong>：Project&nbsp;Manager的简称，项目经理&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Sales</strong>：&nbsp;销售的，有时候代表销售人员&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><strong style="color: #ff0000">Engineer</strong>&nbsp;：工程师&nbsp;</span></span></span></span></span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><br />
</span><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-family: 宋体"><span style="font-family: Comic Sans MS"><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><strong style="color: #ff0000">Parttime</strong>：临时员工，或者叫兼职工作人员</span><span style="font-family: '宋体'; font-size: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></span></span></p>
</div>
<p><span style="font-family: Tahoma"><!--endfragment--><span style="font-size: 12pt"><span style="font-family: 宋体"></span></span></span></p>
<img src ="http://www.blogjava.net/yejiansuo/aggbug/335262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yejiansuo/" target="_blank">叶建锁</a> 2010-10-15 18:59 <a href="http://www.blogjava.net/yejiansuo/archive/2010/10/15/English.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate 的两个实用简单知识</title><link>http://www.blogjava.net/yejiansuo/archive/2010/10/15/335221.html</link><dc:creator>叶建锁</dc:creator><author>叶建锁</author><pubDate>Fri, 15 Oct 2010 04:20:00 GMT</pubDate><guid>http://www.blogjava.net/yejiansuo/archive/2010/10/15/335221.html</guid><description><![CDATA[<br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/yejiansuo/1.jpg" width="615" height="336" /><br />
<br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/yejiansuo/2.jpg" width="724" height="204" />
 <img src ="http://www.blogjava.net/yejiansuo/aggbug/335221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yejiansuo/" target="_blank">叶建锁</a> 2010-10-15 12:20 <a href="http://www.blogjava.net/yejiansuo/archive/2010/10/15/335221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>