﻿<?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>博客园-barney's tech blog</title><link>http://www.cnblogs.com/barney/</link><description>加油, 努力 ~！▃▃,～︶! </description><language>zh-cn</language><lastBuildDate>Thu, 28 Aug 2008 02:25:26 GMT</lastBuildDate><pubDate>Thu, 28 Aug 2008 02:25:26 GMT</pubDate><ttl>60</ttl><item><title>String.Empty、null和""的区别 </title><link>http://www.cnblogs.com/barney/archive/2008/08/27/1277664.html</link><dc:creator>barney</dc:creator><author>barney</author><pubDate>Wed, 27 Aug 2008 05:54:00 GMT</pubDate><guid>http://www.cnblogs.com/barney/archive/2008/08/27/1277664.html</guid><wfw:comment>http://www.cnblogs.com/barney/comments/1277664.html</wfw:comment><comments>http://www.cnblogs.com/barney/archive/2008/08/27/1277664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/barney/comments/commentRss/1277664.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/barney/services/trackbacks/1277664.html</trackback:ping><description><![CDATA[<div class="posthead">
<h2><a class="singleposttitle" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/SAL2928/archive/2007/07/16/820437.html">String.Empty、null和""的区别</a> </h2>
Posted on 2007-07-16 22:52 <a href="http://www.cnblogs.com/SAL2928/">SAL</a> 阅读(273) <a href="http://www.cnblogs.com/SAL2928/archive/2007/07/16/820437.html#Post">评论(1)</a> &nbsp;<a href="http://www.cnblogs.com/SAL2928/admin/EditPosts.aspx?postid=820437">编辑</a> <a href="http://www.cnblogs.com/SAL2928/AddToFavorite.aspx?id=820437">收藏</a> 所属分类: <a href="http://www.cnblogs.com/SAL2928/category/75105.html">ASP.NET</a> <img height="1" src="http://www.cnblogs.com/SAL2928/aggbug/820437.html?type=1&amp;webview=1" width="1"  alt="" /> <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description rdf:about="http://www.cnblogs.com/SAL2928/archive/2007/07/16/820437.html" dc:identifier="http://www.cnblogs.com/SAL2928/archive/2007/07/16/820437.html" dc:title="String.Empty、null和" "的区别" trackback:ping="http://www.cnblogs.com/SAL2928/services/trackbacks/820437.aspx"  />
</rdf:RDF>
--></div>
<div class="postbody"><span style="color: red">string.Empty不分配存储空间<br />
&nbsp; ""分配一个长度为空的存储空间&nbsp;&nbsp;&nbsp;</span><br />
&nbsp; 所以一般用string.Empty<br />
<br />
<span style="color: red">为了以后跨平台，还是用string.empty</span><br />
<br />
在 C# 中，大多数情况下 "" 和 string.Empty 可以互换使用。比如：<br />
<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;s2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">.Empty;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_65_76_Open_Image" onclick="this.style.display='none'; Codehighlighter1_65_76_Open_Text.style.display='none'; Codehighlighter1_65_76_Closed_Image.style.display='inline'; Codehighlighter1_65_76_Closed_Text.style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_65_76_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_65_76_Closed_Text.style.display='none'; Codehighlighter1_65_76_Open_Image.style.display='inline'; Codehighlighter1_65_76_Open_Text.style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(s&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">.Empty)&nbsp;</span><span id="Codehighlighter1_65_76_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_65_76_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #000000">}</span></span></div>
</div>
if语句成立 <br />
<br />
<br />
判定为空字符串的几种写法，按照性能从高到低的顺序是：<br />
<br />
<font color="#0000ff"><strong>s.Length == 0</strong>&nbsp; 优于 s == string.Empty&nbsp; 优于 s == ""&nbsp;</font> <br />
<br />
<br />
<p style="color: red">关于String.Empty和Null的问题是这样的，这两个都是表示空字符串，其中有一个重点是string str1= String.Empty和 string str2=null 的区别，这样定义后，str1是一个空字符串，空字符串是一个特殊的字符串，只不过这个字符串的值为空，在内存中是有准确的指向的，string str2=null,这样定义后，只是定义了一个string 类的引用，str2并没有指向任何地方，在使用前如果不实例化的话，都将报错。 </p>
</div>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/barney/aggbug/1277664.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41930/" target="_blank">[新闻]科学家在世界最大对撞机中观察到首批粒子</a>]]></description></item><item><title>解读设计模式</title><link>http://www.cnblogs.com/barney/archive/2008/08/10/1264601.html</link><dc:creator>barney</dc:creator><author>barney</author><pubDate>Sun, 10 Aug 2008 04:37:00 GMT</pubDate><guid>http://www.cnblogs.com/barney/archive/2008/08/10/1264601.html</guid><wfw:comment>http://www.cnblogs.com/barney/comments/1264601.html</wfw:comment><comments>http://www.cnblogs.com/barney/archive/2008/08/10/1264601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/barney/comments/commentRss/1264601.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/barney/services/trackbacks/1264601.html</trackback:ping><description><![CDATA[<p><span style="list-style-type: none">&nbsp;<a href="http://www.cnblogs.com/beniao">http://www.cnblogs.com/beniao</a></span></p>
<p><span style="list-style-type: none"><a href="http://www.cnblogs.com/beniao/category/113257.html">http://www.cnblogs.com/beniao/category/113257.html</a>&nbsp;&nbsp; 总目录</span></p>
<p><span style="list-style-type: none">&#183; <a href="http://www.cnblogs.com/beniao/archive/2008/07/31/1250823.html"><font color="#666666">解读设计模式----外观模式(Facade Pattern),谈阿牛讨媳妇故事</font></a><br />
</span><span style="list-style-type: none">&#183; <a href="http://www.cnblogs.com/beniao/archive/2008/07/23/1213886.html"><font color="#666666">解读设计模式----代理模式(Proxy Pattern)，从买电脑的那些事儿说起</font></a><br />
</span><span style="list-style-type: none">&#183; <a href="http://www.cnblogs.com/beniao/archive/2008/07/23/1247194.html"><font color="#666666">解读设计模式----模板方法模式(Template Method),电脑就是这样造出来的</font></a><br />
</span><span style="list-style-type: none">&#183; <a href="http://www.cnblogs.com/beniao/archive/2008/07/18/1167987.html"><font color="#666666">解读设计模式----抽象工厂模式(AbstractFactory Pattern)</font></a><br />
</span><span style="list-style-type: none">&#183; <a href="http://www.cnblogs.com/beniao/archive/2008/07/08/1236304.html"><font color="#666666">解读设计模式----策略模式(Strategy Pattern)</font></a><br />
</span><span style="list-style-type: none">&#183; <a href="http://www.cnblogs.com/beniao/archive/2008/07/01/1232799.html"><font color="#666666">解读设计模式----适配器模式(Adapter Pattern),麻雀飞上枝头真能成凤凰？</font></a><br />
</span><span style="list-style-type: none">&#183; <a href="http://www.cnblogs.com/beniao/archive/2008/05/25/1206608.html"><font color="#666666">谈爱情故事,谈观察者模式</font></a><br />
</span><span style="list-style-type: none">&#183; <a href="http://www.cnblogs.com/beniao/archive/2008/05/14/1197071.html"><font color="#666666">解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手</font></a><br />
</span><span style="list-style-type: none">&#183; <a href="http://www.cnblogs.com/beniao/archive/2008/05/13/1145918.html"><font color="#666666">解读设计模式----单例模式(Singleton Pattern)</font></a></span></p>
<p><span style="list-style-type: none"><a class="postTitle2" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/beniao/archive/2008/08/09/1263318.html"><font color="#729773">解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么 </font></a></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="list-style-type: none"><a class="singleposttitle" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/moye/archive/2008/08/17/1269605.html">.net企业级架构实战之1——框架综述</a> </span></p>
<img src ="http://www.cnblogs.com/barney/aggbug/1264601.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41929/" target="_blank">[新闻]阿里巴巴利润增1.36倍</a>]]></description></item><item><title>xsd  数据库</title><link>http://www.cnblogs.com/barney/archive/2008/08/03/1259461.html</link><dc:creator>barney</dc:creator><author>barney</author><pubDate>Sun, 03 Aug 2008 14:36:00 GMT</pubDate><guid>http://www.cnblogs.com/barney/archive/2008/08/03/1259461.html</guid><wfw:comment>http://www.cnblogs.com/barney/comments/1259461.html</wfw:comment><comments>http://www.cnblogs.com/barney/archive/2008/08/03/1259461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/barney/comments/commentRss/1259461.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/barney/services/trackbacks/1259461.html</trackback:ping><description><![CDATA[<p><font face="Verdana">如何使用xsd&nbsp; 数据库 google</font></p>
<p>&nbsp;</p>
<p><a href="http://www.cnblogs.com/Mainz/archive/2007/12/16/996857.html"></a><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/Mainz/archive/2007/12/16/996857.html"><font color="#0066aa">如何由XSD自动生成XML和实体类</font></a><a href="http://www.cnblogs.com/Mainz/archive/2007/12/16/996857.html"> </a></p>
<p><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/hfyb/archive/2007/05/14/745121.html"><font color="#0066aa">如何将关系数据库（sql sever2005）中的表结构转化为XML架构进而生成XML文件？？？</font></a> </p>
<p><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/kid-li/archive/2006/10/25/539624.html"><font color="#006ff7" size="4">使用xsd生成代码</font></a> </p>
<p>&nbsp;</p>
<p><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/piglikefly/archive/2004/09/07/40760.html"><font color="#808080">.Net XML架构文件(.xsd) 自动生成时所创建的几个有用的函数</font></a></p>
<p><a class="postTitle2" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/chenjilv/archive/2008/08/15/1268830.html">如何将.xsd文件自动生成对象</a> </p>
<p><a class="postTitle2" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/chorrysky/archive/2006/12/06/584518.html">XML和关系数据----从XSD架构创建数据集映射</a> </p>
<img src ="http://www.cnblogs.com/barney/aggbug/1259461.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41928/" target="_blank">[新闻]Google Gears覆盖四大浏览器 Safari版推出</a>]]></description></item><item><title>VSS2005教程 </title><link>http://www.cnblogs.com/barney/archive/2008/08/02/1258577.html</link><dc:creator>barney</dc:creator><author>barney</author><pubDate>Sat, 02 Aug 2008 00:13:00 GMT</pubDate><guid>http://www.cnblogs.com/barney/archive/2008/08/02/1258577.html</guid><wfw:comment>http://www.cnblogs.com/barney/comments/1258577.html</wfw:comment><comments>http://www.cnblogs.com/barney/archive/2008/08/02/1258577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/barney/comments/commentRss/1258577.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/barney/services/trackbacks/1258577.html</trackback:ping><description><![CDATA[<h2><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/xlfj521/archive/2007/10/31/944542.html">VSS2005安装录像及教程</a> </h2>
<div class="postbody"><font face="Courier New"><a href="http://www.cnblogs.com/jailu/archive/2006/11/27/573783.html" target="_blank"><font face="Courier New">http://www.cnblogs.com/jailu/archive/2006/11/27/573783.html</font></a>&nbsp;<a class="singleposttitle" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/jailu/archive/2006/11/27/573783.html">VSS 2005 配置（含录像）</a> <br />
<font face="Courier New"><a href="http://www.cnblogs.com/dagon007/archive/2007/03/21/682911.html" target="_blank"><font face="Courier New">http://www.cnblogs.com/dagon007/archive/2007/03/21/682911.html</font></a>&nbsp;Visual Studio2005 + Visual SourceSafe 2005 实现团队开发、源代码管理、版本控制 <br />
</font><font face="Courier New"><a href="http://www.cnblogs.com/chinafine/archive/2007/03/22/683462.html" target="_blank"><font face="Courier New">http://www.cnblogs.com/chinafine/archive/2007/03/22/683462.html</font></a>&nbsp; <a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/chinafine/archive/2007/03/22/683462.html">Visual SourceSafe 2005安装设置教程</a> </font><br />
</font></div>
<img src ="http://www.cnblogs.com/barney/aggbug/1258577.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41927/" target="_blank">[新闻]Internet Explorer 8 Beta 2 发布</a>]]></description></item><item><title>了解Ioc与AOP</title><link>http://www.cnblogs.com/barney/archive/2008/07/28/1255031.html</link><dc:creator>barney</dc:creator><author>barney</author><pubDate>Mon, 28 Jul 2008 11:16:00 GMT</pubDate><guid>http://www.cnblogs.com/barney/archive/2008/07/28/1255031.html</guid><wfw:comment>http://www.cnblogs.com/barney/comments/1255031.html</wfw:comment><comments>http://www.cnblogs.com/barney/archive/2008/07/28/1255031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/barney/comments/commentRss/1255031.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/barney/services/trackbacks/1255031.html</trackback:ping><description><![CDATA[<p><a href="http://www.cnblogs.com/QuitGame">http://www.cnblogs.com/QuitGame</a></p>
<p>&nbsp;</p>
<p><a href="http://www.cnblogs.com/zhenyulu/articles/233966.html"><font color="#000080">你真的了解Ioc与AOP吗？（1）</font></a> </p>
<p><a href="http://www.cnblogs.com/zhenyulu/articles/233968.html"><font color="#000080">你真的了解Ioc与AOP吗？（2）</font></a> </p>
<p><a href="http://www.cnblogs.com/zhenyulu/articles/234069.html"><font color="#000080">你真的了解Ioc与AOP吗？（3）</font></a> </p>
<p><a href="http://www.cnblogs.com/zhenyulu/articles/234075.html"><font color="#000080">你真的了解Ioc与AOP吗？（4）</font></a> </p>
<p><a href="http://www.cnblogs.com/zhenyulu/articles/234074.html"><font color="#000080">你真的了解Ioc与AOP吗？（5）</font></a> </p>
<p>&nbsp;</p>
<p><strong>一、什么是</strong><strong>IOC</strong></p>
<p>IoC就是Inversion of Control，控制反转。在Java开发中，IoC意味着将你设计好的类交给系统去控制，而不是在你的类内部控制。这称为控制反转。&nbsp;</p>
<p>下面我们以几个例子来说明什么是IoC<br />
<br />
假设我们要设计一个Girl和一个Boy类，其中Girl有kiss方法，即Girl想要Kiss一个Boy。那么，我们的问题是，Girl如何能够认识这个Boy？</p>
<p align="center"></p>
<p align="center"></p>
<p>&nbsp;&nbsp;&nbsp; 在我们中国，常见的ＭＭ与GG的认识方式有以下几种</p>
<p>&nbsp;&nbsp;&nbsp; 1　青梅竹马；&nbsp;2　亲友介绍；&nbsp;3　父母包办&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 那么哪一种才是最好呢？</p>
<p>&nbsp;&nbsp;&nbsp; <strong>青梅竹马</strong>：Girl从小就知道自己的Boy。&nbsp;&nbsp;&nbsp; </p>
<div align="center">
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 97.45%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid; height: 115px">
<div align="left"><img id="Codehighlighter1_18_73_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_73_Open_Text.style.display='none'; Codehighlighter1_18_73_Closed_Image.style.display='inline'; Codehighlighter1_18_73_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_18_73_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_73_Closed_Text.style.display='none'; Codehighlighter1_18_73_Open_Image.style.display='inline'; Codehighlighter1_18_73_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Girl&nbsp;</span><span id="Codehighlighter1_18_73_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;<br />
<img id="Codehighlighter1_37_71_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_71_Open_Text.style.display='none'; Codehighlighter1_37_71_Closed_Image.style.display='inline'; Codehighlighter1_37_71_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_37_71_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_37_71_Closed_Text.style.display='none'; Codehighlighter1_37_71_Open_Image.style.display='inline'; Codehighlighter1_37_71_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;kiss()</span><span id="Codehighlighter1_37_71_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boy&nbsp;boy&nbsp;</span><span style="color: #000000">=</span>&nbsp;<span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Boy();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
</div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
<p>&nbsp;&nbsp;&nbsp; 然而从开始就创建的Boy缺点就是无法在更换。并且要负责Boy的整个生命周期。如果我们的Girl想要换一个怎么办？（笔者严重不支持Girl经常更换Boy）</p>
<p>&nbsp;&nbsp;&nbsp; <strong>亲友介绍</strong>：由中间人负责提供Boy来见面&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div align="left">
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 99.32%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid; height: 115px">
<div align="left"><img id="Codehighlighter1_18_90_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_90_Open_Text.style.display='none'; Codehighlighter1_18_90_Closed_Image.style.display='inline'; Codehighlighter1_18_90_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_18_90_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_90_Closed_Text.style.display='none'; Codehighlighter1_18_90_Open_Image.style.display='inline'; Codehighlighter1_18_90_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Girl&nbsp;</span><span id="Codehighlighter1_18_90_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_35_88_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_88_Open_Text.style.display='none'; Codehighlighter1_35_88_Closed_Image.style.display='inline'; Codehighlighter1_35_88_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_35_88_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_35_88_Closed_Text.style.display='none'; Codehighlighter1_35_88_Open_Image.style.display='inline'; Codehighlighter1_35_88_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;kiss()</span><span id="Codehighlighter1_35_88_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boy&nbsp;boy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;BoyFactory.createBoy();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
</div>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 亲友介绍，固然是好。如果不满意，尽管另外换一个好了。但是，亲友BoyFactory经常是以Singleton的形式出现，不然就是，存在于Globals，无处不在，无处不能。实在是太繁琐了一点，不够灵活。我为什么一定要这个亲友掺和进来呢？为什么一定要付给她介绍费呢？万一最好的朋友爱上了我的男朋友呢？&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <strong>父母包办</strong>：一切交给父母，自己不用费吹灰之力，只需要等着Kiss就好了。&nbsp;</p>
<p>&nbsp;</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="Codehighlighter1_18_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_89_Open_Text.style.display='none'; Codehighlighter1_18_89_Closed_Image.style.display='inline'; Codehighlighter1_18_89_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_18_89_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_89_Closed_Text.style.display='none'; Codehighlighter1_18_89_Open_Image.style.display='inline'; Codehighlighter1_18_89_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Girl&nbsp;</span><span id="Codehighlighter1_18_89_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_42_87_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_87_Open_Text.style.display='none'; Codehighlighter1_42_87_Closed_Image.style.display='inline'; Codehighlighter1_42_87_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_42_87_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_42_87_Closed_Text.style.display='none'; Codehighlighter1_42_87_Open_Image.style.display='inline'; Codehighlighter1_42_87_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;kiss(Boy&nbsp;boy)</span><span id="Codehighlighter1_42_87_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;kiss&nbsp;boy&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boy.kiss();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align="center"></p>
<p align="center"></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Well，这是对Girl最好的方法，只要想办法贿赂了Girl的父母，并把Boy交给他。那么我们就可以轻松的和Girl来Kiss了。看来几千年传统的父母之命还真是有用哦。至少Boy和Girl不用自己瞎忙乎了。<br />
<br />
&nbsp;&nbsp;&nbsp; 这就是IOC，将对象的创建和获取提取到外部。由外部容器提供需要的组件。</p>
<p>&nbsp;&nbsp;&nbsp; 我们知道<strong>好莱坞原则</strong>：&#8220;Do not call us, we will call you.&#8221; 意思就是，You, girlie, do not call the boy. We will feed you a boy。</p>
<p>&nbsp;&nbsp;&nbsp; 我们还应该知道<strong>依赖倒转原则</strong>即 Dependence Inversion Princinple，DIP。&nbsp;</p>
<p align="center"></p>
<p align="center"></p>
<p>Eric Gamma说，要面向抽象编程。面向接口编程是面向对象的核心。</p>
<p>组件应该分为两部分，即</p>
<p><strong>Service</strong>, 所提供功能的声明</p>
<p><strong>Implementation</strong>, Service的实现</p>
<p>好处是：多实现可以任意切换，防止 &#8220;everything depends on everything&#8221; 问题．即具体依赖于具体。</p>
<p>所以，我们的Boy应该是实现Kissable接口。这样一旦Girl不想kiss可恶的Boy的话，还可以kiss可爱的kitten和慈祥的grandmother。&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>二、</strong><strong>IOC</strong><strong>的</strong><strong>type</strong></p>
<p>&nbsp;&nbsp;&nbsp; IoC的Type指的是Girl得到Boy的几种不同方式。我们逐一来说明。&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <strong>IOC type 0</strong><strong>：</strong>不用IOC&nbsp;</p>
<div align="left">
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="Codehighlighter1_40_201_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_201_Open_Text.style.display='none'; Codehighlighter1_40_201_Closed_Image.style.display='inline'; Codehighlighter1_40_201_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_40_201_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_40_201_Closed_Text.style.display='none'; Codehighlighter1_40_201_Open_Image.style.display='inline'; Codehighlighter1_40_201_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Girl&nbsp;implements&nbsp;Servicable&nbsp;</span><span id="Codehighlighter1_40_201_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Kissable&nbsp;kissable;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_93_129_Open_Image" onclick="this.style.display='none'; Codehighlighter1_93_129_Open_Text.style.display='none'; Codehighlighter1_93_129_Closed_Image.style.display='inline'; Codehighlighter1_93_129_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_93_129_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_93_129_Closed_Text.style.display='none'; Codehighlighter1_93_129_Open_Image.style.display='inline'; Codehighlighter1_93_129_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Girl()&nbsp;</span><span id="Codehighlighter1_93_129_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kissable&nbsp;</span><span style="color: #000000">=</span>&nbsp;<span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Boy();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_167_198_Open_Image" onclick="this.style.display='none'; Codehighlighter1_167_198_Open_Text.style.display='none'; Codehighlighter1_167_198_Closed_Image.style.display='inline'; Codehighlighter1_167_198_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_167_198_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_167_198_Closed_Text.style.display='none'; Codehighlighter1_167_198_Open_Image.style.display='inline'; Codehighlighter1_167_198_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;kissYourKissable()&nbsp;</span><span id="Codehighlighter1_167_198_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kissable.kiss();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</div>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Girl自己建立自己的Boy，很难更换，很难共享给别人，只能单独使用，并负责完全的生命周期。&nbsp;</p>
<p><strong>&nbsp;&nbsp;&nbsp; IOC type 1</strong><strong>，</strong>先看代码：&nbsp;</p>
<div align="left">
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div align="left"><img id="Codehighlighter1_40_243_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_243_Open_Text.style.display='none'; Codehighlighter1_40_243_Closed_Image.style.display='inline'; Codehighlighter1_40_243_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_40_243_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_40_243_Closed_Text.style.display='none'; Codehighlighter1_40_243_Open_Image.style.display='inline'; Codehighlighter1_40_243_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Girl&nbsp;implements&nbsp;Servicable&nbsp;</span><span id="Codehighlighter1_40_243_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Kissable&nbsp;kissable;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_111_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_171_Open_Text.style.display='none'; Codehighlighter1_111_171_Closed_Image.style.display='inline'; Codehighlighter1_111_171_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_111_171_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_111_171_Closed_Text.style.display='none'; Codehighlighter1_111_171_Open_Image.style.display='inline'; Codehighlighter1_111_171_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;service(ServiceManager&nbsp;mgr)&nbsp;</span><span id="Codehighlighter1_111_171_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kissable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Kissable)&nbsp;mgr.lookup(&#8220;kissable&#8221;);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_209_240_Open_Image" onclick="this.style.display='none'; Codehighlighter1_209_240_Open_Text.style.display='none'; Codehighlighter1_209_240_Closed_Image.style.display='inline'; Codehighlighter1_209_240_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_209_240_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_209_240_Closed_Text.style.display='none'; Codehighlighter1_209_240_Open_Image.style.display='inline'; Codehighlighter1_209_240_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;kissYourKissable()&nbsp;</span><span id="Codehighlighter1_209_240_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kissable.kiss();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</div>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 这种情况出现于Avalon Framework。一个组件实现了Servicable接口，就必须实现service方法，并传入一个ServiceManager。其中会含有需要的其它组件。只需要在service方法中初始化需要的Boy。</p>
<p>&nbsp;&nbsp;&nbsp; 另外，J2EE中从Context取得对象也属于type 1。&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 它依赖于配置文件</p>
<div align="left">
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">container</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">component&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8220;kissable&#8220;&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">=&#8220;Boy"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">&lt;configuration</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&#8230;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">component</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">component&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8220;girl"&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">=&#8220;Girl"&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">container</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</div>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>IOC type 2</strong><strong>：</strong>&nbsp;&nbsp;&nbsp; </p>
<div align="left">
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div align="left"><img id="Codehighlighter1_18_212_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_212_Open_Text.style.display='none'; Codehighlighter1_18_212_Closed_Image.style.display='inline'; Codehighlighter1_18_212_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_18_212_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_212_Closed_Text.style.display='none'; Codehighlighter1_18_212_Open_Image.style.display='inline'; Codehighlighter1_18_212_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Girl&nbsp;</span><span id="Codehighlighter1_18_212_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Kissable&nbsp;kissable;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_100_140_Open_Image" onclick="this.style.display='none'; Codehighlighter1_100_140_Open_Text.style.display='none'; Codehighlighter1_100_140_Closed_Image.style.display='inline'; Codehighlighter1_100_140_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_100_140_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_100_140_Closed_Text.style.display='none'; Codehighlighter1_100_140_Open_Image.style.display='inline'; Codehighlighter1_100_140_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setKissable(Kissable&nbsp;kissable)&nbsp;</span><span id="Codehighlighter1_100_140_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.kissable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;kissable;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_178_209_Open_Image" onclick="this.style.display='none'; Codehighlighter1_178_209_Open_Text.style.display='none'; Codehighlighter1_178_209_Closed_Image.style.display='inline'; Codehighlighter1_178_209_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_178_209_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_178_209_Closed_Text.style.display='none'; Codehighlighter1_178_209_Open_Image.style.display='inline'; Codehighlighter1_178_209_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;kissYourKissable()&nbsp;</span><span id="Codehighlighter1_178_209_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kissable.kiss();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</div>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Type 2出现于Spring Framework，是通过JavaBean的set方法来将需要的Boy传递给Girl。它必须依赖于配置文件。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div align="left">
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div align="left"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&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">=&#8220;boy"&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">=&#8220;Boy"/&gt;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">&lt;bean&nbsp;id</span><span style="color: #0000ff">=&#8220;girl&#8220;&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">=&#8220;Girl"&gt;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">&lt;property&nbsp;name</span><span style="color: #0000ff">=&#8220;kissable"&gt;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">&lt;ref&nbsp;bean</span><span style="color: #0000ff">=&#8220;boy"/&gt;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">&lt;/property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&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"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span>&nbsp;</div>
</div>
</div>
<p>&nbsp;<strong>IOC type 3</strong>&nbsp;</p>
<div align="left">
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div align="left"><img id="Codehighlighter1_18_200_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_200_Open_Text.style.display='none'; Codehighlighter1_18_200_Closed_Image.style.display='inline'; Codehighlighter1_18_200_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_18_200_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_200_Closed_Text.style.display='none'; Codehighlighter1_18_200_Open_Image.style.display='inline'; Codehighlighter1_18_200_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Girl&nbsp;</span><span id="Codehighlighter1_18_200_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Kissable&nbsp;kissable;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_88_128_Open_Image" onclick="this.style.display='none'; Codehighlighter1_88_128_Open_Text.style.display='none'; Codehighlighter1_88_128_Closed_Image.style.display='inline'; Codehighlighter1_88_128_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_88_128_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_88_128_Closed_Text.style.display='none'; Codehighlighter1_88_128_Open_Image.style.display='inline'; Codehighlighter1_88_128_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Girl(Kissable&nbsp;kissable)&nbsp;</span><span id="Codehighlighter1_88_128_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.kissable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;kissable;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_166_197_Open_Image" onclick="this.style.display='none'; Codehighlighter1_166_197_Open_Text.style.display='none'; Codehighlighter1_166_197_Closed_Image.style.display='inline'; Codehighlighter1_166_197_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_166_197_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_166_197_Closed_Text.style.display='none'; Codehighlighter1_166_197_Open_Image.style.display='inline'; Codehighlighter1_166_197_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span>&nbsp;<span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;kissYourKissable()&nbsp;</span><span id="Codehighlighter1_166_197_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kissable.kiss();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</div>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 这就是PicoContainer的组件 。通过构造函数传递Boy给Girl。&nbsp;</p>
<p>&nbsp;</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">PicoContainer&nbsp;container&nbsp;</span><span style="color: #000000">=</span>&nbsp;<span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DefaultPicoContainer();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />container.registerComponentImplementation(Boy.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />container.registerComponentImplementation(Girl.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />Girl&nbsp;girl&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Girl)&nbsp;container.getComponentInstance(Girl.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />girl.kissYourKissable();</span></div>
</div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 关于PicoContainer，作者后续文章会详细介绍。&nbsp;</p>
<p><strong>作者语：</strong>&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; Well，以上的这些理论部分有些已经有了新的定义了。过些天我会再写一些文章具体说明。比如，原来的三种type结构现在已经重新定义为依赖注射的许多层次。</p>
<p>IoC很年轻，还在发展。伴随着IOC的发展，AOP，COP，SOP等等都在不断的发展。作为程序员，随时关注着新的思想的发展是一件很轻松愉快的事情。有没有人愿意和我一起探讨学习共同进步呀！<br />
<br />
</p>
<p><strong><span style="font-family: 宋体">参考资料</span></strong>&nbsp;</p>
<p><span style="font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; 1 </span><span style="font-family: 宋体">本文主要插图及文字来源于</span><span style="font-family: 'Courier New'">ThoughtWorks</span><span style="font-family: 宋体">公司的</span><span style="font-family: 'Courier New'">Jon Tirs&#233;n </span><span style="font-family: 宋体">与</span><span style="font-family: 'Courier New'"> Aslak Helles&#248;y</span><span style="font-family: 宋体">（</span><span style="font-family: 'Courier New'">PicoContainer</span><span style="font-family: 宋体">的两位开发者），</span><span style="font-family: 'Courier New'">2003</span><span style="font-family: 宋体">年在</span><span style="font-family: 'Courier New'">Java Polis</span><span style="font-family: 宋体">的演讲</span><span style="font-family: 'Courier New'">PPT</span><span style="font-family: 宋体">。有删改。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://www.picocontainer.org/presentations/JavaPolis2003.ppt">http://www.picocontainer.org/presentations/JavaPolis2003.ppt</a></span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://www.picocontainer.org/presentations/JavaPolis2003.pdf">http://www.picocontainer.org/presentations/JavaPolis2003.pdf</a></span>&nbsp;</p>
<p><span style="font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; 2 DIP</span><span style="font-family: 宋体">，</span><span style="font-family: 'Courier New'"> Robert C Martin, Bob</span><span style="font-family: 宋体">大叔的优秀论文</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://www.objectmentor.com/resources/articles/dip.pdf">http://www.objectmentor.com/resources/articles/dip.pdf</a></span>&nbsp;</p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">3 Dependency Injection</span><span style="font-family: 宋体">　依赖注射，</span><span style="font-family: 'Courier New'">Matrin Fowler</span><span style="font-family: 宋体">对</span><span style="font-family: 'Courier New'">DIP</span><span style="font-family: 宋体">的扩展</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://www.martinfowler.com/articles/injection.html">http://www.martinfowler.com/articles/injection.html</a></span>&nbsp;</p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">4 IOC</span><span style="font-family: 宋体">框架</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">PicoContainer </span><span style="font-family: 宋体">优秀的</span><span style="font-family: 'Courier New'">IOC</span><span style="font-family: 宋体">框架</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://picocontainer.org/">http://picocontainer.org/</a></span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">Avalon</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://avalon.apache.org/">http://avalon.apache.org/</a></span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">Spring Framework</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://www.springframework.org/">http://www.springframework.org/</a></span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">HiveMind</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://jakarta.apache.org/commons/hivemind">http://jakarta.apache.org/commons/hivemind</a></span>&nbsp;</p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">5 </span><span style="font-family: 宋体">中文资料</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">程序匠：国内研究</span><span style="font-family: 'Courier New'">Pico</span><span style="font-family: 宋体">的先驱</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://douleimi.vicp.net/space/start">http://douleimi.vicp.net/space/start</a></span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">Jdon</span><span style="font-family: 宋体">：板桥也在研究</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://www.jdon.com/design.htm">http://www.jdon.com/design.htm</a></span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">Spring</span><span style="font-family: 宋体">　</span><span style="font-family: 'Courier New'">Framework</span><span style="font-family: 宋体">中文论坛</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://xglw.51.net/5team/springframework/index.php">http://xglw.51.net/5team/springframework/index.php</a></span></p>
<span style="font-family: 'Courier New'">
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">Avalon 中文资料</span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://www.huihoo.org/apache/avalon/introduction.html"><u>http://www.huihoo.org/apache/avalon/introduction.html</u></a></span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">ERPROAD </span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://www.erproad.org/index.asp?vt=bycat&amp;cat_id=37"><u>http://www.erproad.org/index.asp?vt=bycat&amp;cat_id=37</u></a></span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'">Open Heart </span></p>
<p style="text-indent: 21pt"><span style="font-family: 'Courier New'"><a href="http://blogbus.com/blogbus/blog/index.php?blogid=2529&amp;cat=5"><u>http://blogbus.com/blogbus/blog/index.php?blogid=2529&amp;cat=5</u></a></span></p>
</span>
<img src ="http://www.cnblogs.com/barney/aggbug/1255031.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41924/" target="_blank">[新闻]中国软件协会：SAP羞辱国产软件是不正当竞争</a>]]></description></item><item><title>VS2005 常用快捷键一览表</title><link>http://www.cnblogs.com/barney/archive/2008/07/25/1251648.html</link><dc:creator>barney</dc:creator><author>barney</author><pubDate>Fri, 25 Jul 2008 11:38:00 GMT</pubDate><guid>http://www.cnblogs.com/barney/archive/2008/07/25/1251648.html</guid><wfw:comment>http://www.cnblogs.com/barney/comments/1251648.html</wfw:comment><comments>http://www.cnblogs.com/barney/archive/2008/07/25/1251648.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/barney/comments/commentRss/1251648.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/barney/services/trackbacks/1251648.html</trackback:ping><description><![CDATA[<p>VS2005代码编辑器的展开和折叠代码确实很方便和实用。以下是展开代码和折叠代码所用到的快捷键，很常用：</p>
<p>Ctrl + M + O: 折叠所有方法</p>
<p>Ctrl + M + M: 折叠或者展开当前方法</p>
<p>Ctrl + M + L: 展开所有方法</p>
<p><a href="http://hi.baidu.com/ytwhw/blog/item/9a41ca1f3a926860f624e4c2.html">http://hi.baidu.com/ytwhw/blog/item/9a41ca1f3a926860f624e4c2.html</a></p>
<img src ="http://www.cnblogs.com/barney/aggbug/1251648.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41923/" target="_blank">[新闻]福布斯：Facebook网站十大最火爆游戏</a>]]></description></item><item><title>petshop4.0 profile</title><link>http://www.cnblogs.com/barney/archive/2008/07/23/1249655.html</link><dc:creator>barney</dc:creator><author>barney</author><pubDate>Wed, 23 Jul 2008 07:49:00 GMT</pubDate><guid>http://www.cnblogs.com/barney/archive/2008/07/23/1249655.html</guid><wfw:comment>http://www.cnblogs.com/barney/comments/1249655.html</wfw:comment><comments>http://www.cnblogs.com/barney/archive/2008/07/23/1249655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/barney/comments/commentRss/1249655.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/barney/services/trackbacks/1249655.html</trackback:ping><description><![CDATA[<p><a href="http://www.cnblogs.com/njnudt/archive/2007/09/03/880324.html">http://www.cnblogs.com/njnudt/archive/2007/09/03/880324.html</a></p>
<p><a href="http://www.cnblogs.com/Caceolod/articles/1190175.html">http://www.cnblogs.com/Caceolod/articles/1190175.html</a></p>
<p><a href="http://www.cnblogs.com/YoungPeng/archive/2008/04/30/1177629.html">http://www.cnblogs.com/YoungPeng/archive/2008/04/30/1177629.html</a></p>
<p><a href="http://www.cnblogs.com/howsmile/archive/2006/09/18/507524.aspx">http://www.cnblogs.com/howsmile/archive/2006/09/18/507524.aspx</a></p>
<p><a href="http://blog.csdn.net/swort_177/archive/2008/01/02/2010920.aspx">http://blog.csdn.net/swort_177/archive/2008/01/02/2010920.aspx</a></p>
<p>&nbsp;更好的答案再这里&nbsp;&nbsp; <a href="http://tech.it168.com/KnowledgeBase/Articles/f/f/e/ffe7c061cc088327a26fc29950dc7914.htm">http://tech.it168.com/KnowledgeBase/Articles/f/f/e/ffe7c061cc088327a26fc29950dc7914.htm</a></p>
<p><a href="http://blog.csdn.net/xc_lw/archive/2006/11/20/1398425.aspx">http://blog.csdn.net/xc_lw/archive/2006/11/20/1398425.aspx</a></p>
<p>ProfileAuthenticationOption 枚举 描述要搜索的用户配置文件的身份验证类型。 <br />
All 搜索所有配置文件。&nbsp; <br />
Anonymous 仅搜索匿名配置文件。&nbsp; <br />
Authenticated 仅搜索已验证身份的配置文件。 <br />
</p>
<p>web.config中profile的配置<br />
&lt;add name="SQLProfileConnString" connectionString="server=.;database=MSPetShop4Profile;user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id=mspetshop;password=pass@word1;min pool size=4;max pool size=4;" providerName="System.Data.SqlClient"/&gt;<br />
这个用来设置profile要用到的数据库</p>
<p>&lt;profile automaticSaveEnabled ="false" defaultProvider ="ShoppingCartProvider"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;providers&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;add name ="ShoppingCartProvider" type="Zjw.Profile.PetShopProfileProvider" connectionStringName="SQLProfileConnString" applicationName=".NET Pet Shop 4.0"/&gt;这里的name就是上面的defaultProvider的也就是要配置文件提供程序的名称，在下面也将要用到。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;add name ="WishListProvider" type="Zjw.Profile.PetShopProfileProvider" connectionStringName="SQLProfileConnString" applicationName=".NET Pet Shop 4.0"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;add name ="AccountInfoProvider" type="Zjw.Profile.PetShopProfileProvider" connectionStringName="SQLProfileConnString" applicationName=".NET Pet Shop 4.0"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/providers&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;properties&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;add name ="ShoppingCart" type ="Zjw.BLL.Cart" allowAnonymous ="true" provider ="ShoppingCartProvider"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;add name="WishList" type="Zjw.BLL.Cart" allowAnonymous="true" provider ="WishListProvider"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;add name="AccountInfo" type ="Zjw.Model.AddressInfo" allowAnonymous ="true" provider ="AccountInfoProvider"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/properties&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/profile&gt;</p>
<p>automaticSaveEnabled<br />
指定用户配置文件是否在 ASP.NET 页执行结束时自动保存。如果为 true，则用户配置文件在 ASP.NET 页执行结束时自动保存。<br />
defaultProvider<br />
指定默认配置文件提供程序的名称。<br />
&nbsp;&lt;providers&gt;&nbsp; &lt;/providers&gt;可选的元素。定义配置文件提供程序的集合。<br />
type&nbsp; 指定实现 ProfileProvider 抽象基类的类型。就是自己写的prifileProvider类<br />
connectionStringName 用来连接数据库，前面的&lt;connnection&gt;中定义的<br />
applicationName 应用程序的名字<br />
&lt;properties&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/properties&gt;这个必须有&nbsp; <br />
其中name是要设置的profile属性，该值用作自动生成的配置文件类的属性的名称，并用作该属性在 Properties 集合中的索引值。该属性的名称不能包含句点 (.)。<br />
type指定属性类型。 <br />
allowAnnymous 指定在应用程序用户是匿名用户的情况下是否可以获取或设置属性。<br />
provider 就是 &lt;providers&gt;&nbsp; &lt;/providers&gt;中提供的名字</p>
<p>在匿名用户登陆后，应用程序维护的匿名用户的个性化设置信息，要变为存在数据库中的用户个性化设置。<br />
这个时候将引发MigrateAnonymous事件。这个事件处理处理方法在global.asax中 为void MigrateAnonymous(object sender,profileMiGrateEventArgs e)中&nbsp; Global.asax 文件（也叫做 ASP.NET 应用程序文件）是一个可选的文件，该文件包含响应 ASP.NET 或 HTTP 模块引发的应用程序级别事件的代码。在这里主要处理一些应用程序的事件处理方法。如session_start,application_end等。<br />
{<br />
ProfileCommon anonProfile = Profile.GetProfile(e.AnonymousID);<br />
系统根据我们对profile的配置创建的profileCommon类<br />
foreach (CartItemInfo cartItem in anonProfile.ShoppingCart.CartItems)<br />
Profile.ShoppingCart.Add(cartItem);<br />
foreach (CartItemInfo cartItem in anonProfile.WishList.CartItems)<br />
Profile.WishList.Add(cartItem);<br />
//上面是把匿名用户的<br />
ProfileManager.DeleteProfile(e.AnonymousID);<br />
//ProfileManager 类用于管理配置文件设置、搜索用户配置文件，以及删除不再使用的用户配置文件。是个静态类<br />
AnonymousIdentificationModule.ClearAnonymousIdentifier();<br />
//AnonymousIdentificationModule 类创建并管理 ASP.NET 应用程序的匿名标识符<br />
//清除与某个会话关联的匿名 Cookie 或标识符。 <br />
//ClearAnonymousIdentifier()清除与某个会话关联的匿名 Cookie 或标识符。<br />
//ClearAnonymousIdentifier 方法移除与网站上的会话关联的匿名标识符。当用户切换到与某个用户 ID 关联且经过身份验证的会话时（例如//，当 MigrateAnonymous 事件发生时），ClearAnonymousIdentifier 方法用于移除与某个会话关联的匿名标识符。<br />
Profile.Save();<br />
}<br />
ProfileMigrateEventArgs 对象将事件信息提供给 ProfileModule 类的 MigrateAnonymous 事件。ProfileMigrateEventArgs 对象为 AnonymousID 属性中的匿名配置文件提供对当前请求的 HttpContext 和匿名用户标识符的访问。 <br />
AnonymousID 属性包含匿名用户的唯一标识符。当匿名使用应用程序的人登录时，可以处理 MigrateAnonymous 事件，以将配置文件属性值从用户的匿名配置文件复制到他（或她）已验证身份的配置文件中。<br />
在我们为web.config配置文件中对Profile进行配置后，启动Web应用程序，ASP.NET会根据该配置文件中的相关配置创建一个ProfileCommon类的实例(单步调试可以看到创建ProfileCommon)。该类继承自System.Web.Profile.ProfileBase类。然后调用从父类继承来的GetPropertyValue和SetPropertyValue方法，检索和设置配置文件的属性值。然后，ASP.NET将创建好的ProfileCommon实例设置为页面的Profile属性值。</p>
<p>&nbsp;</p>
<p>----------</p>
<p>&lt;system.web&gt;<br />
&lt;profileautomaticSaveEnabled="false" defaultProvider="默认的Profile Provider"&gt;<br />
&lt;providers&gt;<br />
&lt;addname="自己命名的Provider名称" connectionStringName="配置文件里的数据库链接名称" type="自己的Provider实现类，需要自己重写" applicationName="自己定义的应用程序名称"/&gt;<br />
&lt;/providers&gt;<br />
&lt;properties&gt;<br />
&lt;addname="自己命名的Profile名称" type="自己的类，需要构建" allowAnonymous="false" provider="上面的自己命名的Provider名称"/&gt;<br />
&lt;/properties&gt;<br />
&lt;/profile&gt;<br />
&lt;/system.web&gt;<br />
<br />
注意事项：<br />
1、Profile的type可以为自己的类，包括业务实例或方法等。<br />
2、通过重写ProfileProvider里的部份方法，实现在自己的数据库里记录自己想要的个性化用户信息。<br />
3、如果每个用户有大量的数据信息，则该类数据信息不要通过Profile来记录。<br />
4、被定义为Profile的type的类，必须在类定义前增加[Serializable]以实现可序列化。<br />
5、接口定义的类型必须为类。<br />
6、Profile Provider类里必须增加System.Web.Profile和System.Configuration的引用到项目中。<br />
7、如果需要支持匿名用户，增加&lt;anonymousIdentification enabled="true" /&gt;到web.config里，在profile之间。<br />
8、使用Profile.Save方法后，将调用ProfileDALFactory里的方法将数据保存到数据库。<br />
</p>
<img src ="http://www.cnblogs.com/barney/aggbug/1249655.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41922/" target="_blank">[新闻]谷歌允许用户评论搜索结果调整顺序</a>]]></description></item><item><title>sql exsits问题！！</title><link>http://www.cnblogs.com/barney/archive/2008/07/21/1247883.html</link><dc:creator>barney</dc:creator><author>barney</author><pubDate>Mon, 21 Jul 2008 10:07:00 GMT</pubDate><guid>http://www.cnblogs.com/barney/archive/2008/07/21/1247883.html</guid><wfw:comment>http://www.cnblogs.com/barney/comments/1247883.html</wfw:comment><comments>http://www.cnblogs.com/barney/archive/2008/07/21/1247883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/barney/comments/commentRss/1247883.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/barney/services/trackbacks/1247883.html</trackback:ping><description><![CDATA[<p>复习数据库,看到EXISTS这个谓语的时候,我真的有点晕菜了,平时没有注意,现在我怎么看都看不懂它的流程</p>
<p>数据库题目里面有很多题目是关于&#8220;所有&#8221;问题的，比如：查询选修所有课程的学生的名字。这时候理论上就轮到exists和no exists出手了，由于我看球不懂这个谓语的执行顺序，自己用其他方法写了个，希望老师不会打我错啊！</p>
<p>下面是一个例题（从网上抄的一个题目）：<br />
有学生选课关系<br />
S(Snum,Sname,Ssex,Sage,Dnum)</p>
<p>Snum Sname Sex Age SD<br />
S001 王明 男 19 D2<br />
S002 李勇 男 23 D3<br />
S003 刘燕 女 21 D1<br />
S004 王萍 女 23 D1<br />
S005 王佳 男 24 D3<br />
S006 赵婷 女 20 D1</p>
<p>SC(Snum,Cnum,Score)<br />
Snum Cnum Score<br />
S001 C1 83<br />
S001 C2 89<br />
S001 C3 65<br />
S001 C4 85<br />
S001 C5 85<br />
S002 C3 69<br />
S002 C4 75<br />
S003 C1 95<br />
S004 C1 85<br />
S005 C2 92<br />
S005 C3 76</p>
<p>C(Cnum,Cname,Cfreq)<br />
Cnum Cname Cfreq<br />
C1 数据库系统原理 4<br />
C2 C程序设计 4<br />
C3 计算机体系结构 3<br />
C4 自动控制原理 2<br />
C5 数据结构 4</p>
<p>求选修了所有课程的学生的名字？<br />
标准答案：<br />
select Sname<br />
From&nbsp; S<br />
Where&nbsp; not exists<br />
(select *<br />
From&nbsp; C<br />
Where&nbsp; not exists<br />
(select *<br />
From&nbsp; SC<br />
Where&nbsp; Snum=S.Snum<br />
and Cnum=C.Cnum))</p>
<p>我实在是看不懂Where&nbsp; Snum=S.Snum and Cnum=C.Cnum放在这里是什么意思，太笨了没得办法，那位兄台知道这个语句的执行顺序的话还望不吝指教。</p>
<p>我自己写的：语意是选择选修了所有5门课的学生的姓名。<br />
select Sname<br />
From&nbsp;S<br />
Where&nbsp;Snum in(<br />
select Snum<br />
From&nbsp;SC<br />
group by Snum<br />
having count(Cnum)=5<br />
)</p>
<p>---------------------------------------------------</p>
<p><span style="color: red">s表存储学生的信息 &nbsp; <br />
&nbsp; c表存储课程信息 &nbsp; <br />
&nbsp; sc表存储学生成绩 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 查询返回的结果是所有课程都有成绩的学生的名字 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; select &nbsp; sname &nbsp; <br />
&nbsp; from &nbsp; s &nbsp; &nbsp; <br />
&nbsp; where &nbsp; not &nbsp; exists &nbsp; <br />
&nbsp; &nbsp; &nbsp; (select &nbsp; &nbsp; * &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; from &nbsp; c &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; where &nbsp; not &nbsp; exists &nbsp; <br />
&nbsp; &nbsp; &nbsp; (select &nbsp; * &nbsp; from &nbsp; sc &nbsp; where &nbsp; sc.s# &nbsp; = &nbsp; s.s# &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; and &nbsp; sc.c#=c.c#)) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 1、先看第一个exists后面的那部分： &nbsp; <br />
&nbsp; (select &nbsp; &nbsp; * &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; from &nbsp; c &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; where &nbsp; not &nbsp; exists &nbsp; <br />
&nbsp; &nbsp; &nbsp; (select &nbsp; * &nbsp; from &nbsp; sc &nbsp; where &nbsp; sc.s# &nbsp; = &nbsp; s.s# &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; and &nbsp; sc.c#=c.c#)) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; 先看select &nbsp; * &nbsp; from &nbsp; sc &nbsp; where &nbsp; sc.s# &nbsp; = &nbsp; s.s# &nbsp; and &nbsp; sc.c#=c.c#)，接联查询，从sc中查询出所有&#8220;选了某门课程并且该门课程有成绩的学号、课程号以及该课程分数&#8221;，那么 &nbsp; <br />
&nbsp; where &nbsp; not &nbsp; exists &nbsp; <br />
&nbsp; &nbsp; &nbsp; (select &nbsp; &nbsp; * &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; from &nbsp; c &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; where &nbsp; not &nbsp; exists &nbsp; <br />
&nbsp; &nbsp; &nbsp; (select &nbsp; * &nbsp; from &nbsp; sc &nbsp; where &nbsp; sc.s# &nbsp; = &nbsp; s.s# &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; and &nbsp; sc.c#=c.c#)) &nbsp; <br />
&nbsp; 的意思就是从c表中&#8220;查询出某些课程号，满足这些课程号是某些学生没有选的&#8221; &nbsp; <br />
&nbsp; 2、再看整个查询语句的意思就是&#8220;查询出学生的名字，满足没有一门课程是他没有选的&#8221; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 所以整个查询结果就是：所有课程都选了的学生的名字&nbsp;&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p><span style="color: red">负负得正，记住这个就行了理解了好久。</span></p>
<p><span style="color: red">帮顶！&nbsp;&nbsp;&nbsp;<br />
&nbsp; ---------------</span></p>
<p><span style="color: red">&nbsp;</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">例</span>42&nbsp;<span style="font-family: 宋体">查询选修了全部课程的学生姓名。</span></p>
<p style="text-indent: 21pt">SELECT Sname</p>
<p style="text-indent: 21pt">FROM Student</p>
<p style="text-indent: 21pt">WHERE NOT EXISTS</p>
<p style="text-indent: 21pt">&nbsp;&nbsp;&nbsp; (SELECT *</p>
<p style="text-indent: 21pt"><span>&nbsp;&nbsp;&nbsp; FROM Course</span></p>
<p style="text-indent: 21pt">&nbsp;&nbsp;&nbsp; WHERE NOT EXISTS</p>
<p style="text-indent: 21pt"><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SELECT *</span></p>
<p style="text-indent: 63pt">&nbsp;&nbsp; FROM SC</p>
<p style="text-indent: 63pt"><span>&nbsp;&nbsp; WHERE SC.Sno</span><span style="font-family: 宋体">＝</span>Student.Sno</p>
<p style="text-indent: 21pt">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND SC.Cno<span style="font-family: 宋体">＝</span>Course.Cno))<span style="font-family: 宋体">；</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">例</span>43&nbsp;<span style="font-family: 宋体">查询至少选修了学生</span>95002<span style="font-family: 宋体">选修的全部课程的学生号码。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">本题的查询要求可以做如下解释，查询这样的学生，凡是</span>95002<span style="font-family: 宋体">选修的课，他都选修了。换句话说，若有一个学号为</span>x<span style="font-family: 宋体">的学生，对所有的课程</span>y<span style="font-family: 宋体">，只要学号为</span>95002<span style="font-family: 宋体">的学生选修了课程</span>y<span style="font-family: 宋体">，则</span>x<span style="font-family: 宋体">也选修了</span>y<span style="font-family: 宋体">；那么就将他的学号选出来。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">即不存在这样的课程</span>y<span style="font-family: 宋体">，学生</span>95002<span style="font-family: 宋体">选修了</span>y<span style="font-family: 宋体">，而学生</span>x<span style="font-family: 宋体">没有选。用</span>SQL<span style="font-family: 宋体">语言可表示如下：</span></p>
<p style="text-indent: 21pt">SELECT DISTINCT Sno</p>
<p style="text-indent: 21pt">FROM SC SCX</p>
<p style="text-indent: 21pt">WHERE NOT EXISTS</p>
<p style="text-indent: 21pt">&nbsp;&nbsp;&nbsp; (SELECT *</p>
<p style="text-indent: 21pt"><span>&nbsp;&nbsp;&nbsp; FROM SC SCY</span></p>
<p style="text-indent: 42pt">WHERE SCY.Sno<span style="font-family: 宋体">＝</span>&#8217;95002&#8217; AND</p>
<p style="text-indent: 21pt">&nbsp;&nbsp;&nbsp; NOT EXISTS</p>
<p style="text-indent: 21pt"><span>&nbsp;&nbsp;&nbsp; (SELECT *</span></p>
<p style="text-indent: 21pt">&nbsp;&nbsp;&nbsp; FROM SC SCZ</p>
<p style="text-indent: 21pt"><span>&nbsp;&nbsp;&nbsp; WHERE SCZ.Sno</span><span style="font-family: 宋体">＝</span>SCX.Sno AND</p>
<p style="text-indent: 21pt">&nbsp;&nbsp;&nbsp; SCZ.Cno<span style="font-family: 宋体">＝</span>SCY.Cno))<span style="font-family: 宋体">；</span></p>
<p><br />
</span>&nbsp;</p>
<img src ="http://www.cnblogs.com/barney/aggbug/1247883.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41921/" target="_blank">[新闻]Internet 另一超级漏洞被公布</a>]]></description></item><item><title>应用程序域(Application Domain) </title><link>http://www.cnblogs.com/barney/archive/2008/07/20/1247019.html</link><dc:creator>barney</dc:creator><author>barney</author><pubDate>Sun, 20 Jul 2008 06:07:00 GMT</pubDate><guid>http://www.cnblogs.com/barney/archive/2008/07/20/1247019.html</guid><wfw:comment>http://www.cnblogs.com/barney/comments/1247019.html</wfw:comment><comments>http://www.cnblogs.com/barney/archive/2008/07/20/1247019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/barney/comments/commentRss/1247019.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/barney/services/trackbacks/1247019.html</trackback:ping><description><![CDATA[<h1><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/axzxs2001/archive/2008/07/20/1246980.html">应用程序域(Application Domain)</a> </h1>
<div></div>
<div>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">大家都知道，.net写的程序，都是托管的，何为托管？就是让&#8220;其他的程序&#8221;来管理，也解析运行，什么又在这里充当&#8220;其他程序&#8221;呢？这里大体上说是CLR(通用语言运行时)，这只是大体上的，准确的在底层是怎么去处理托管程序与操作系统间的关系呢?</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">操作系统上运行的都是进程，这进程是非托管的。现在。我们有一个Demo.exe，他是用.net写的（这里与语言无关了，因为编设成程序集后，都成为IL语言了），当然是一个托管理程序。这里的问题就是怎么把Demo.exe变成一个进程，运行在操作系统的进程中。这里就引出了应用程序域（Application Domain），应用程序域(Application Domain)是&#8220;托管理代码与非托管理代码之间的桥梁&#8221;（引自《.NET组件编程设计》），进程，应用程序域，.net程序集（这里是Demo.exe），之间的关系可以见下图：</span></p>
<p align="center">&nbsp;</p>
<p align="center"></p>
<p><span style="font-size: 9pt; font-family: 新宋体">
<div align="center"><img height="200" alt="" src="http://www.cnblogs.com/images/cnblogs_com/axzxs2001/AppDomain1.jpg" width="300" border="0" /></div>
<div align="center">(图1)</div>
一个进程中可以有多个应用程序域（Application Domain），一个应用程序域（Application Domain）中可以有多个程序集。</span>
<p>&nbsp;</p>
<p><span style="font-size: 9pt; font-family: 新宋体">应用程序域（Application Domain）的引入的好处在于，如果一个程序集出现错误，不会影响到别的应用程序域（Application Domain），同时他们又是一个进程中的。</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">在.net中，应用程序域（Application Domain）是用AppDomain类来表示的。</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">AppDomain CurrentAD=AppDomain.CurrentDomain;</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">上面的代码实现了获取当有程序集所在的应用程序域（Application Domain）。获取当前应用程序域（Application Domain）还可以通过当前线程来得到，如下：</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">AppDomain CurrentAD=Threed.GetDomain();</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">下面再看一下在当前应用程序域（Application Domain）中创建对象：</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">类：</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">Class Class1</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">{</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">&nbsp;&nbsp; Public void FF()</span></p>
<p style="text-indent: 9pt"><span style="font-size: 9pt; font-family: 新宋体">{</span></p>
<p style="text-indent: 9pt"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;//</span><span style="font-size: 9pt; font-family: 新宋体">实现功能</span></p>
<p style="text-indent: 9pt"><span style="font-size: 9pt; font-family: 新宋体">}</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">{</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">AppDomain CurrentAD=Threed.GetDomain();</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">Class1 C1=(Class1)CurrentAD.CreateInstanceAndUnwrap(</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8220;</span><span style="font-size: 9pt; font-family: 新宋体">程序集名称</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">,</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">名命空间.类名</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">);</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">C1.FF();</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">这个是关于当前的应用程序域（Application Domain）的操作，怎么创建一个应用程序域（Application Domain）呢？看下面</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">AppDomain MyAppDomain=AppDomain.CreatDomain(</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8220;</span><span style="font-size: 9pt; font-family: 新宋体">MyNewAD</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">);</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">Class1 C1=(Class1)CurrentAD.CreateInstanceAndUnwrap(</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8220;</span><span style="font-size: 9pt; font-family: 新宋体">程序集名称</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">,</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">名命空间.类名</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">);</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">C1.FF();</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">或 </span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">AppDomain MyAppDomain=AppDomain.CreatDomain(</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8220;</span><span style="font-size: 9pt; font-family: 新宋体">MyNewAD</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">);</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">IObjectHandle handle=CurrentAD.CreateInstance </span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8220;</span><span style="font-size: 9pt; font-family: 新宋体">程序集名称</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">,</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">名命空间.类名</span><span style="font-size: 9pt; font-family: 'Times New Roman','serif'">&#8221;</span><span style="font-size: 9pt; font-family: 新宋体">);</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">Class1 C1=(Class1)handle.Unwrap();</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">C1.FF();</span></p>
<p><span style="font-size: 9pt; font-family: 新宋体">后都的好处在于用C1这个对象的时候才进处理。</span></p>
</div>
<img src ="http://www.cnblogs.com/barney/aggbug/1247019.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41920/" target="_blank">[新闻]3 个独特的未来搜索引擎</a>]]></description></item><item><title>HttpContext</title><link>http://www.cnblogs.com/barney/archive/2008/07/19/1246626.html</link><dc:creator>barney</dc:creator><author>barney</author><pubDate>Sat, 19 Jul 2008 06:35:00 GMT</pubDate><guid>http://www.cnblogs.com/barney/archive/2008/07/19/1246626.html</guid><wfw:comment>http://www.cnblogs.com/barney/comments/1246626.html</wfw:comment><comments>http://www.cnblogs.com/barney/archive/2008/07/19/1246626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/barney/comments/commentRss/1246626.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/barney/services/trackbacks/1246626.html</trackback:ping><description><![CDATA[<p><a href="http://msdn.microsoft.com/zh-cn/library/system.web.httpcontext(VS.80).aspx">http://msdn.microsoft.com/zh-cn/library/system.web.httpcontext(VS.80).aspx</a>&nbsp;&nbsp; &nbsp;msdn</p>
<p>&nbsp;</p>
<p>以前的时候，自己读了一篇关于HttpContext的文章，直到今天我才知道自己以前原来都被它误导了，使我误解为HttpContext是存在整个用户请求的生命周期，而实则上只存在单个的请求中</p>
<p>引用一篇文章如下，希望对大家有所帮助<br />
</p>
<p>一、介绍<br />
&nbsp;&nbsp;&nbsp; ASP.NET提供了很多变量来管理状态：比如<font style="background-color: #ffffff">application</font> state，session state，view state等。这里介绍一种通过HttpContext类的Items（属性） 集合来保存Http状态。<br />
&nbsp;&nbsp;&nbsp; HttpContext对象只针对一个单一的http请求。这个类的属性还有Request对象、Response对象、Session对象等。你可以通过<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context.Items["MyObject"] = new object();<br />
或&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object o = Context.Items["MyObject"];<br />
来set或get 它。Items包含了key-value形式的哈希表对象。</p>
<p>二、主要用法<br />
1、在两个表单之间传递数据<br />
看下面的代码：</p>
<p>对于WebForm1：</p>
<p>private void Page_Load(object sender, System.EventArgs e)<br />
{<br />
&nbsp;&nbsp; ArrayList list = new ArrayList(4);<br />
&nbsp;&nbsp; list.Add("This list ");<br />
&nbsp;&nbsp; list.Add("is for ");<br />
&nbsp;&nbsp; list.Add("WebForm2 ");<br />
&nbsp;&nbsp; list.Add("to see. ");</p>
<p>&nbsp;&nbsp; Context.Items["WebForm1List"] = list;</p>
<p>&nbsp;&nbsp; Server.Transfer("WebForm2.aspx");<br />
}</p>
<p>对于WebForm2：</p>
<p>private void Page_Load(object sender, System.EventArgs e)<br />
{<br />
&nbsp;&nbsp; ArrayList list = Context.Items["WebForm1List"] as ArrayList;</p>
<p>&nbsp;&nbsp; if(list != null)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach(string s in list)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; } <br />
}</p>
<p>在WebForm1的页面加载过程中，通过Server.Transfer方法，将WebForm1的状态传递到了WebForm2，WebForm2可以得到它，并作一些相应的处理。用法1也可以用Session来做。</p>
<p>2、截获Http请求并作特殊处理<br />
主要是用在Application_BeginRequest方法里。Application_BeginRequest方法在global.asax.cs里定义。你可以在Http请求刚刚开始的时候，截获他，做一些特殊的处理。这里你不能用Session来做，因为此时Session对象还没有被建立。<br />
</p>
<p>利用Context.Item集合，你可以在Http请求的整个生命期，通过HttpModules, HttpHandlers, Webforms, and Application 事件。</p>
<img src ="http://www.cnblogs.com/barney/aggbug/1246626.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41919/" target="_blank">[新闻]诺基亚新机N85 N79发布</a>]]></description></item></channel></rss>