??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲第一视频网站,亚洲a视频在线观看,亚洲一欧洲中文字幕在线http://m.tkk7.com/Jluoguang/如果说Y件开发是一条布满荆的坎坷之\Q那么我会每天在q道路两旁书上“火焰舞者,到此一游!”?/description>zh-cnSun, 11 May 2025 04:36:14 GMTSun, 11 May 2025 04:36:14 GMT60Builder模式的理?/title><link>http://m.tkk7.com/Jluoguang/archive/2010/03/15/315359.html</link><dc:creator>永远的火焰舞?/dc:creator><author>永远的火焰舞?/author><pubDate>Sun, 14 Mar 2010 18:00:00 GMT</pubDate><guid>http://m.tkk7.com/Jluoguang/archive/2010/03/15/315359.html</guid><wfw:comment>http://m.tkk7.com/Jluoguang/comments/315359.html</wfw:comment><comments>http://m.tkk7.com/Jluoguang/archive/2010/03/15/315359.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Jluoguang/comments/commentRss/315359.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Jluoguang/services/trackbacks/315359.html</trackback:ping><description><![CDATA[<span lang="EN-US">      Builder模式是一步一步创Z个复杂的对象Q它允许用户可以只通过指定复杂对象的类型和内容可以构建它们。用户不需要知道内部的具体构徏l节。因Z个复杂的对象Q?span lang="EN-US">不但有很多大量组成部分,如汽车,有很多部?车轮、方向盘、发动机q有各种零件等{,部g很多Q但q不止这些,如何这些部件装配成一辆汽车呢Q这个装配过E也很复?需要很好的l装技?QBuilder模式是Z部件和l装q程分开。是Z构建复杂对象的<strong>q程</strong>和它?strong>部g</strong>解耦。注?Q是解?strong>q程</strong>?strong>部g<em>?br /> </em></strong>        拿造房子来_比如某一天你的领导找C你,“A啊,工作不错Q你的能力和态度都是我比较欣赏的Q好好干前途一片大?#8221;Q然后你摸摸脑袋Q呵呵傻W,“我最q想盖一栋别墅,你帮我搞定吧Q有你在Q我攑ֿ”Q然后你屁颠屁颠跑去找了N个各个领域的师傅Q砌墙的、安装电U的、装地板的、修马桶的ؕ78遭一堆hQ好了,现在可以动工了吧。但你手下的那些师傅却是你瞧我,我瞧你的Q?#8220;老板Q怎么应该做成什么样的别墅,先从哪搞P”q时侯,你也M吧,忽略了最重要的一?设计Q没办法锅自׃不会Q去找个设计师设计兼指挥吧。设计师列出了N个方案,q择了其中之一动工了。一个月后,你的上司找你要了房子交付后,q个q程也就完结了。builder模式是q么个过E,把你的装配过E(设计师指挥各个师傅装配房子的序q程Q和q个builderQ带领各个专职师傅所作的事情Q也是部g职责分离。光说不l,没用Q那接下来咱p下代码更加Ş象化下,如下Q?br />          UMLcdQ?br /> <img height="299" alt="" src="http://m.tkk7.com/images/blogjava_net/jluoguang/00.jpg" width="562" border="0" /><br />         UML序囄略如下:<br />          <img alt="" src="file:///C:/DOCUME~1/luoguang/LOCALS~1/Temp/8I`A@I(12UB$LNZ5L5U8@8R.jpg" /> <br /> <br />            首先假设一个复杂对象是由多个部件组成的QBuilder模式是把复杂对象的创建和部g的创建分别开来,分别用BuildercdDirectorcL表示?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_25_259_Open_Image" onclick="this.style.display='none'; Codehighlighter1_25_259_Open_Text.style.display='none'; Codehighlighter1_25_259_Closed_Image.style.display='inline'; Codehighlighter1_25_259_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_25_259_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_25_259_Closed_Text.style.display='none'; Codehighlighter1_25_259_Open_Image.style.display='inline'; Codehighlighter1_25_259_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">interface</span><span style="color: #000000"> Builder </span><span id="Codehighlighter1_25_259_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_25_259_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #008000">//</span><span style="color: #008000"> 比如砌墙</span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> buildPartA();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #008000">//</span><span style="color: #008000"> 比如装电U?/span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> buildPartB();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #008000">//</span><span style="color: #008000"> 比如装马?/span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> buildPartC();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #008000">//</span><span style="color: #008000">q回最后组装成品结?nbsp;(q回最后装配好的汽?<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #008000">//</span><span style="color: #008000">成品的组装过E不在这里进行,而是转移C面的DirectorcMq行?br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #008000">//</span><span style="color: #008000">从而实C解耦【过E】和【部件?/span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> Product getResult();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <br /> <p>       ?span lang="EN-US">Director构徏最后的复杂对象Q而在上面Builder接口中封装的是如何创Z个个部g(复杂对象是由q些部gl成?Q也是说Director的内Ҏ如何部件最后组装成成品Q?br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000"><br /> <img id="Codehighlighter1_23_216_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_216_Open_Text.style.display='none'; Codehighlighter1_23_216_Closed_Image.style.display='inline'; Codehighlighter1_23_216_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_23_216_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_23_216_Closed_Text.style.display='none'; Codehighlighter1_23_216_Open_Image.style.display='inline'; Codehighlighter1_23_216_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Director </span><span id="Codehighlighter1_23_216_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_23_216_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">private</span><span style="color: #000000"> Builder builder;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /> <img id="Codehighlighter1_55_95_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_95_Open_Text.style.display='none'; Codehighlighter1_55_95_Closed_Image.style.display='inline'; Codehighlighter1_55_95_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_55_95_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_55_95_Closed_Text.style.display='none'; Codehighlighter1_55_95_Open_Image.style.display='inline'; Codehighlighter1_55_95_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_55_95_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">/** */</span><span id="Codehighlighter1_55_95_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />     * 产品的组装过E,q里可以改变装配序Q从而得C同的Ҏ<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /> <img id="Codehighlighter1_118_214_Open_Image" onclick="this.style.display='none'; Codehighlighter1_118_214_Open_Text.style.display='none'; Codehighlighter1_118_214_Closed_Image.style.display='inline'; Codehighlighter1_118_214_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_118_214_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_118_214_Closed_Text.style.display='none'; Codehighlighter1_118_214_Open_Image.style.display='inline'; Codehighlighter1_118_214_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> build() </span><span id="Codehighlighter1_118_214_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_118_214_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        builder.buildPartA();</span><span style="color: #008000">//</span><span style="color: #008000"> 先砌?/span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">        builder.buildPartB();</span><span style="color: #008000">//</span><span style="color: #008000"> 再装늺</span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">        builder.buildPartC();</span><span style="color: #008000">//</span><span style="color: #008000"> 而后装马?/span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span></div> </span></span></span><br />       <span lang="EN-US">Builder的具体实现ConcreteBuilderQ通过具体完成接口Builder来构建或装配产品的部Ӟ定义q明它所要创建的是什么具体东西;提供一个可以重新获取品的接口?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_48_272_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_272_Open_Text.style.display='none'; Codehighlighter1_48_272_Closed_Image.style.display='inline'; Codehighlighter1_48_272_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_48_272_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_48_272_Closed_Text.style.display='none'; Codehighlighter1_48_272_Open_Image.style.display='inline'; Codehighlighter1_48_272_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> ConcreteBuilder </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Builder </span><span id="Codehighlighter1_48_272_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_48_272_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_77_95_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_95_Open_Text.style.display='none'; Codehighlighter1_77_95_Closed_Image.style.display='inline'; Codehighlighter1_77_95_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_77_95_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_77_95_Closed_Text.style.display='none'; Codehighlighter1_77_95_Open_Image.style.display='inline'; Codehighlighter1_77_95_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> buildPartA() </span><span id="Codehighlighter1_77_95_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_77_95_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #008000">//</span><span style="color: #008000"> 具体如何砌墙的过E?/span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_124_143_Open_Image" onclick="this.style.display='none'; Codehighlighter1_124_143_Open_Text.style.display='none'; Codehighlighter1_124_143_Closed_Image.style.display='inline'; Codehighlighter1_124_143_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_124_143_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_124_143_Closed_Text.style.display='none'; Codehighlighter1_124_143_Open_Image.style.display='inline'; Codehighlighter1_124_143_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> buildPartB() </span><span id="Codehighlighter1_124_143_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_124_143_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #008000">//</span><span style="color: #008000"> 具体如何装电U的q程</span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_172_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_172_191_Open_Text.style.display='none'; Codehighlighter1_172_191_Closed_Image.style.display='inline'; Codehighlighter1_172_191_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_172_191_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_172_191_Closed_Text.style.display='none'; Codehighlighter1_172_191_Open_Image.style.display='inline'; Codehighlighter1_172_191_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> buildPartC() </span><span id="Codehighlighter1_172_191_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_172_191_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #008000">//</span><span style="color: #008000"> 具体如何装马桶的q程</span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_222_269_Open_Image" onclick="this.style.display='none'; Codehighlighter1_222_269_Open_Text.style.display='none'; Codehighlighter1_222_269_Closed_Image.style.display='inline'; Codehighlighter1_222_269_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_222_269_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_222_269_Closed_Text.style.display='none'; Codehighlighter1_222_269_Open_Image.style.display='inline'; Codehighlighter1_222_269_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> Product getResult() </span><span id="Codehighlighter1_222_269_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_222_269_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #008000">//</span><span style="color: #008000"> q回最后的l装的品(房子Q?/span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Product();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <br />        复杂对象Q?span lang="EN-US">产品Product<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_25_27_Open_Image" onclick="this.style.display='none'; Codehighlighter1_25_27_Open_Text.style.display='none'; Codehighlighter1_25_27_Closed_Image.style.display='inline'; Codehighlighter1_25_27_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_25_27_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_25_27_Closed_Text.style.display='none'; Codehighlighter1_25_27_Open_Image.style.display='inline'; Codehighlighter1_25_27_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">interface</span><span style="color: #000000"> Product </span><span id="Codehighlighter1_25_27_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_25_27_Open_Text"><span style="color: #000000">{ }</span></span><span style="color: #000000"> <br /> </span></div> </span></span><br />        复杂对象的部Ӟ部gPart<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_22_24_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_24_Open_Text.style.display='none'; Codehighlighter1_22_24_Closed_Image.style.display='inline'; Codehighlighter1_22_24_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_22_24_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_22_24_Closed_Text.style.display='none'; Codehighlighter1_22_24_Open_Image.style.display='inline'; Codehighlighter1_22_24_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">interface</span><span style="color: #000000"> Part </span><span id="Codehighlighter1_22_24_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_22_24_Open_Text"><span style="color: #000000">{ }</span></span></div> <br />        接下d是我们的老板来找我们要房子了Q?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://m.tkk7.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">ConcreteBuilder builder </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ConcreteBuilder();<br /> <img src="http://m.tkk7.com/Images/OutliningIndicators/None.gif" align="top" alt="" />Director director </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Director( builder ); <br /> <img src="http://m.tkk7.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><br /> <img src="http://m.tkk7.com/Images/OutliningIndicators/None.gif" align="top" alt="" />director.build(); <br /> <img src="http://m.tkk7.com/Images/OutliningIndicators/None.gif" align="top" alt="" />Product product </span><span style="color: #000000">=</span><span style="color: #000000"> builder.getResult(); <br /> <img src="http://m.tkk7.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span></div> <br />        整个builder模式p样完l了Q当然有Z有疑?#8220;Z么getResult不放在Director里?”至于q个问题我是q么想的Q你的老板当然是找你要房子了,难不成还找设计师要?我们是builder嘛,那些部gQPartQ可都是我们理的,而设计师只负责设计组装,q样q程和部件不是职责分ȝ很清楚吗Q如果哪一天,老板又想造另外一栋格式不一L别墅Q我们就直接找设计师解决下。至于builder模式和abstract factory模式的差异,我是q么理解的,builder模式注重于一个过E,而abstract factory则侧重于产品的管理? <img src ="http://m.tkk7.com/Jluoguang/aggbug/315359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Jluoguang/" target="_blank">永远的火焰舞?/a> 2010-03-15 02:00 <a href="http://m.tkk7.com/Jluoguang/archive/2010/03/15/315359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JForum安装http://m.tkk7.com/Jluoguang/archive/2010/03/11/jluoguang.html永远的火焰舞?/dc:creator>永远的火焰舞?/author>Wed, 10 Mar 2010 16:49:00 GMThttp://m.tkk7.com/Jluoguang/archive/2010/03/11/jluoguang.htmlhttp://m.tkk7.com/Jluoguang/comments/315109.htmlhttp://m.tkk7.com/Jluoguang/archive/2010/03/11/jluoguang.html#Feedback2http://m.tkk7.com/Jluoguang/comments/commentRss/315109.htmlhttp://m.tkk7.com/Jluoguang/services/trackbacks/315109.html 工具版本Q?/strong>
1、JForum版本为jforum-2.1.8.zipQ下载地址?a >http://jforum.net/download.jsp?br /> 2、mysql版本为mysql-5.0.18-win32.zip?br /> 3、tomcat版本为apache-tomcat-5.5.26.zip?br /> 安装步骤Q?br /> 1、创建数据库jforumQ执行jforum\WEB-INF\config\database\mysql\mysql_db_struct.sql创徏所需的表?br /> 2、把JForum工程考到tomcat下的webapp下,q行tomcat\bin下的startup.bat启动tomcat?br /> 3、打开http://localhost:8080/jforum/install.jsp q行配置Q?br />
其中数据库密码要Ҏmysql安装时候设|的username和password输入Q安装成功后自动跌{到论坛主c?br />

        一开始安装最后出现jdbcconnectionL认host、username、password之类的,很好扄错误Q马上就发现是创建的数据库名和配|的时候输入的数据库名不对应,修改下立马解冟?

]]>
Spring IoC的简单实?http://m.tkk7.com/Jluoguang/archive/2009/03/26/262067.html永远的火焰舞?/dc:creator>永远的火焰舞?/author>Thu, 26 Mar 2009 06:41:00 GMThttp://m.tkk7.com/Jluoguang/archive/2009/03/26/262067.htmlhttp://m.tkk7.com/Jluoguang/comments/262067.htmlhttp://m.tkk7.com/Jluoguang/archive/2009/03/26/262067.html#Feedback0http://m.tkk7.com/Jluoguang/comments/commentRss/262067.htmlhttp://m.tkk7.com/Jluoguang/services/trackbacks/262067.html阅读全文

]]>
Prototype(原型)http://m.tkk7.com/Jluoguang/archive/2009/03/03/257456.html永远的火焰舞?/dc:creator>永远的火焰舞?/author>Tue, 03 Mar 2009 00:19:00 GMThttp://m.tkk7.com/Jluoguang/archive/2009/03/03/257456.htmlhttp://m.tkk7.com/Jluoguang/comments/257456.htmlhttp://m.tkk7.com/Jluoguang/archive/2009/03/03/257456.html#Feedback0http://m.tkk7.com/Jluoguang/comments/commentRss/257456.htmlhttp://m.tkk7.com/Jluoguang/services/trackbacks/257456.html 通过一个原型对象传l那个要发动创徏的对象,q个要发动创建的对象通过h原型对象拯它们自己来实施创建,所以Prototype模式允许一个对象再创徏另外一个可定制的对象,Ҏ无需知道M如何创徏的细节?br /> 以细胞ؓ例:l胞a克隆出细胞bQ细胞a、bh相同的属?br /> 如果以一般的做法我们会这P
public class Cell {
    
    
// l胞?/span>
    private String cellWall = null;
    
    
// l胞?/span>
    private String membrane = null;
    
    
// l胞?/span>
    private String nucleus = null;
    
    
/**
     * 省略get、setҎ
     
*/


客户端调用:
        // 产生l胞A
        Cell cellA = new Cell("l胞?/span>""l胞?/span>""l胞?/span>");

        
/* 产生与A同样的细胞B  */
        Cell cellB 
= new Cell();
        cellB.setCellWall(cellA.getCellWall());
        cellB.setMembrane(cellA.getMembrane());
        cellB.setNucleus(cellB.getNucleus());
q种J琐而重复性高的复制能不能只写一遍呢Q答案是“?#8221;

public class Cell implements Cloneable {
    
    
// l胞?/span>
    private String cellWall = null;
    
    
// l胞?/span>
    private String membrane = null;
    
    
// l胞?/span>
    private String nucleus = null;
    
    
public Cell clone() throws CloneNotSupportedException {
        
return (Cell)super.clone();
    }

客户端调用:
public class PrototypeClient {

    
public static void main(String[] args) throws CloneNotSupportedException {
        
// 产生l胞A
        Cell cellA = new Cell("l胞?/span>""l胞?/span>""l胞?/span>");

        
/* 产生与A同样的细胞B  */
        Cell cellB 
= cellA.clone();
        
        System.out.println(cellA 
== cellB);
    }

}
上述E序q行的结果ؓfalseQ说明clone()在内存区开辟了另一块引用。以上的cloneҎ也被UCؓ“度拯”Q关于深度拷贝这里就不做详说了?br />
在一个复杂的cdơ当中,当系l必M其中的许多类型创建新对象Ӟ可以考虑原型?br />


]]>
抽象工厂模式http://m.tkk7.com/Jluoguang/archive/2009/03/01/257119.html永远的火焰舞?/dc:creator>永远的火焰舞?/author>Sun, 01 Mar 2009 00:35:00 GMThttp://m.tkk7.com/Jluoguang/archive/2009/03/01/257119.htmlhttp://m.tkk7.com/Jluoguang/comments/257119.htmlhttp://m.tkk7.com/Jluoguang/archive/2009/03/01/257119.html#Feedback0http://m.tkk7.com/Jluoguang/comments/commentRss/257119.htmlhttp://m.tkk7.com/Jluoguang/services/trackbacks/257119.html在上文章中我们用肉样一个场景描qC单工厂模式,肉铺老板卖的不同品种的猪肉,设想随着旉的消逝,肉铺的生意日红火,客户要求增加鸭、鸡、牛{之cȝ肉,q样我们p分别引进亚洲鸭、非z鸭Q亚z鸡、非z鸡{等Q很明显原先的Y件设计就昄很无力了Q根本适应不了C的状态。所以就引进了抽象工厂模式?/p>

抽象工厂模式是所有Ş态的工厂模式中最为抽象和最具一般性的一UŞ态?/p>

Z方便引进抽象工厂模式Q引q一个新概念Q?font color="#000080">产品族(Product FamilyQ?/font>。所谓品族Q是指位于不同品等U结构,功能相关?/span>的?/span>l成的家族。如图:

图中一共有四个产品族,分布于三个不同的产品{l构中。只要指明一个品所处的产品族以及它所属的{l构Q就可以唯一的确定这个品?/p>

所谓的抽象工厂是指一个工厂等U结构可以创建出分属于不同品等U结构的一个品族中的所有对象。如果用图来描述的话Q如下图Q?/p>

AbstractFactory模式的结构如下:

图中AfricanPig和AsiaPig构成一个等U结构,AfiricanPorkFactory生出来的包括AfricanPig和AfricanDuck构成一个品族?/p>

抽象工厂QAbstract FactoryQ角Ԍ担Qq个角色的是工厂Ҏ模式的核心,它是与应用系l商业逻辑无关的?

具体工厂QConcrete FactoryQ角Ԍq个角色直接在客L的调用下创徏产品的实例。这个角色含有选择合适的产品对象的逻辑Q而这个逻辑是与应用pȝ的商业逻辑紧密相关的?/p>

抽象产品QAbstract ProductQ角Ԍ担Qq个角色的类是工厂方法模式所创徏的对象的父类Q或它们共同拥有的接口?/p> 具体产品QConcrete ProductQ角Ԍ抽象工厂模式所创徏的Q何品对象都是某一个具体品类的实例。这是客L最l需要的东西Q其内部一定充满了应用pȝ的商业逻辑?br />
上图的程序如下:

public interface Duck {

    
public void send();
}

public class AsiaDuck implements Duck {

    
public void send() {
        System.out.println(
"send Asia duck");
    }
}

public class AfricanDuck implements Duck {

    
public void send() {
        System.out.println(
"send African duck");
    }
}

public interface Pig {

    
public void send();
}

public class AsiaPig implements Pig {

    
public void send() {
        System.out.println(
"send Asia pig");
    }
}

public class AfricanPig implements Pig {

    
public void send() {
        System.out.println(
"send African pig");
    }
}

public abstract class AbstractFactory {

    
public abstract Pig createPig();
    
    
public abstract Duck createDuck();
}

public class AfricanPorkFactory extends AbstractFactory {

    @Override
    
public Duck createDuck() {
        
return new AfricanDuck();
    }

    @Override
    
public Pig createPig() {
        
return new AfricanPig();
    }
}

public class AsiaPorkFactory extends AbstractFactory {

    @Override
    
public Duck createDuck() {
        
return new AsiaDuck();
    }

    @Override
    
public Pig createPig() {
        
return new AsiaPig();
    }
}

public class PorkStoreClient {

    
private Pig pig = null;
    
private Duck duck = null;
    
    
public PorkStoreClient(AbstractFactory factory) {
        pig 
= factory.createPig();
        duck 
= factory.createDuck();
    }
    
    
public void send() {
        pig.send();
        duck.send();
    }
    
    
public static void main(String[] args) {
        AbstractFactory africanFactory 
= new AfricanPorkFactory();
        PorkStoreClient africanPorkStore 
= new PorkStoreClient(africanFactory);
        africanPorkStore.send();
        
        AbstractFactory asiaFactory 
= new AsiaPorkFactory();
        PorkStoreClient asiaPorkStore 
= new PorkStoreClient(asiaFactory);
        asiaPorkStore.send();
    }
}
上述的场景可能不是很好的阐述了抽象工厂的应用Q但我们如果换个场景呢?把text和button作ؓ产品Q而UnixText和UnixButton构成Unix产品族,WinText和WinButton作ؓWindow产品族。还有汽车的雉件等{场景都能让你更加了解抽象工厂的应用?br />
抽象工厂模式与工厂方法模式的区别
工厂Ҏ模式是一U极端情늚抽象工厂模式Q而抽象工厂模式可以看成是工厂Ҏ模式的一U推qѝ?
(1)、工厂方法模式是用来创徏一个品的{l构的,而抽象工厂模式是用来创徏多个产品的等U结构的。工厂方法创Z般只有一个方法,创徏一U品。抽象工厂一般有多个ҎQ创Zpd产品?
(2)、工厂方法模式只有一个抽象品类Q而抽象工厂模式有多个。工厂方法模式的具体工厂cd能创Z个具体品类的实例,而抽象工厂模式可以创建多个?



]]>
工厂Ҏ模式http://m.tkk7.com/Jluoguang/archive/2009/02/28/257114.html永远的火焰舞?/dc:creator>永远的火焰舞?/author>Fri, 27 Feb 2009 23:38:00 GMThttp://m.tkk7.com/Jluoguang/archive/2009/02/28/257114.htmlhttp://m.tkk7.com/Jluoguang/comments/257114.htmlhttp://m.tkk7.com/Jluoguang/archive/2009/02/28/257114.html#Feedback0http://m.tkk7.com/Jluoguang/comments/commentRss/257114.htmlhttp://m.tkk7.com/Jluoguang/services/trackbacks/257114.html cd如下Q?br />
原先我们可能会在客户端直接调用比如Pig asiaPig = new AsiaPig()之类的代码,但现在我们只需调用PigFactory.createPig(***)来达到对Pig实现cȝ创徏Q这样客LE序中超cȝ代码和子cd象的创徏代码解藕了?br />
public class PigFactory {

    @SuppressWarnings(
"unchecked")
    
public static Pig createPig(String pigName) {
        
if ("AsiaPig".equals(pigName)) {
            
return new AsiaPig();
        } 
else if ("AfricanPig".equals(pigName)) {
            
return new AfricanPig();
        } 
else {
            
return null;
        }
    }
}

public class PorkStore {

    
private static void sendPork(String pigName) {
        Pig africanPig 
= PigFactory.createPig(pigName);
        africanPig.send();
        
    }
    
     
public static void main(String[] args) {
         sendPork(
"AsiaPig");
         sendPork(
"AfricanPig");
    }
}

q样做的另一个问题又出来了,随着if else的增多代码块变的趋庞大Q这时就可利用java的发来q行改善了,调整如下Q?br />
package factoryMethod;

public class PigFactory {

    @SuppressWarnings(
"unchecked")
    
public static Pig createPig(String pigNme) {
        
try {
            Class animalClass 
= Class.forName(pigNme);
            
            
return (Pig)animalClass.newInstance();
        } 
catch (ClassNotFoundException e) {
            
throw new RuntimeException("caught exception while found the class", e);
        } 
catch (InstantiationException e) {
            
throw new RuntimeException("caught exception while instantiation", e);
        } 
catch (IllegalAccessException e) {
            
throw new RuntimeException(e);
        }
    }
}

public class PorkStore {

    
private static void sendPork(String pigName) {
        Pig africanPig 
= PigFactory.createPig(pigName);
        africanPig.send();
        
    }
    
     
public static void main(String[] args) {
         sendPork(
"factoryMethod.AsiaPig");
         sendPork(
"factoryMethod.AfricanPig");
    }
}

共厂Ҏ模式定义了一个创建对象的接口Q但由子cd定要实例化的cL哪一个,让类把实例化推迟到子c?/strong>?br />

]]>
单例模式http://m.tkk7.com/Jluoguang/archive/2009/02/27/257101.html永远的火焰舞?/dc:creator>永远的火焰舞?/author>Fri, 27 Feb 2009 15:47:00 GMThttp://m.tkk7.com/Jluoguang/archive/2009/02/27/257101.htmlhttp://m.tkk7.com/Jluoguang/comments/257101.htmlhttp://m.tkk7.com/Jluoguang/archive/2009/02/27/257101.html#Feedback0http://m.tkk7.com/Jluoguang/comments/commentRss/257101.htmlhttp://m.tkk7.com/Jluoguang/services/trackbacks/257101.html 有些大的对象其实我们只需要一个,比如_U程池、缓存、日志对Q充当打印机、显卡等讑֤的驱动程序的对象{,q类对象只能有一个实例,如果刉出多个׃产生许多问题?br /> 单g模式保一个类只能有一个实例,q且提供一个全局的访问点?br />
public class Singleton {

    
private static Singleton instance = null;
    
    
private Singleton () { }
    
    
public static Singleton getInstance() {
        
if (instance == null) {
            instance 
= new Singleton();
        }
        
        
return instance;
    }

}

初看hq段代码没有一炚w题,但如果发生多U程的情况呢Q因为多U程的不定性,很有可能生很多个Singleton实例了。再来改善下让它能够适应多线E,如下Q?br />
public class Singleton {

    
private static Singleton instance = null;
    
    
private Singleton () {}
    
    
public static synchronized Singleton getInstance() {
        
if (instance == null) {
            instance 
= new Singleton();
        }
        
        
return instance;
    }

}

q样做多U程的问题是消除了,但却产生另外的问题:以后每次讉K都需要执行同步方法,产生了严重的性能问题。再来改善下多线E,如下Q?br />
1、用急切创徏实例Q而不使用延迟加蝲
public class Singleton {

    
private static Singleton instance = new Singleton();
    
    
private Singleton () {}
    
    
public static  Singleton getInstance() {
        
return instance;
    }

}
现在我们依赖JVM在加载这个类旉上创建此cȝ单g实例QJVM保证在Q何线E访问instance静态变量之前先创徏此实例?br />
2、用双重检查加锁,在getInstance中减用同?br />
public class Singleton {

    
// volatile 有效的确保当instance被初始化成实例时Q多U程正确的处理instance变量?/span>
    private volatile static  Singleton instance = null;
    
    
private Singleton () {}
    
    
public static  Singleton getInstance() {
        
        
// 如果实例不存在就q入实例块,只有W一ơ才d执行q里的代码?/span>
        if (instance == null) {
            
// q里有效的阻止了多线E问题的产生
            synchronized (Singleton.class) {
                
// q入区块后,再检查一ơ,只有实例为空才创建实例?/span>
                if (instance == null) {
                    instance
= new Singleton();
                }
            }
        }
        
        
return instance;
    }

}



]]>
Inject Bean By Annotationhttp://m.tkk7.com/Jluoguang/archive/2008/12/17/246759.html永远的火焰舞?/dc:creator>永远的火焰舞?/author>Tue, 16 Dec 2008 17:17:00 GMThttp://m.tkk7.com/Jluoguang/archive/2008/12/17/246759.htmlhttp://m.tkk7.com/Jluoguang/comments/246759.htmlhttp://m.tkk7.com/Jluoguang/archive/2008/12/17/246759.html#Feedback0http://m.tkk7.com/Jluoguang/comments/commentRss/246759.htmlhttp://m.tkk7.com/Jluoguang/services/trackbacks/246759.html阅读全文

]]>
Spring IoC 编?/title><link>http://m.tkk7.com/Jluoguang/archive/2008/12/12/245820.html</link><dc:creator>永远的火焰舞?/dc:creator><author>永远的火焰舞?/author><pubDate>Thu, 11 Dec 2008 18:26:00 GMT</pubDate><guid>http://m.tkk7.com/Jluoguang/archive/2008/12/12/245820.html</guid><wfw:comment>http://m.tkk7.com/Jluoguang/comments/245820.html</wfw:comment><comments>http://m.tkk7.com/Jluoguang/archive/2008/12/12/245820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Jluoguang/comments/commentRss/245820.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Jluoguang/services/trackbacks/245820.html</trackback:ping><description><![CDATA[q几天一直在看spring的源码,也多亏了JE上jiwenke大哥的ioc解析Q让我有U播开乌云见天日的感觉。就像武侠剧里的楞头年青,捡了本不世秘W,功力浅Q差点走火入。spring真的是博大精q家伙Q它把一些深层次的东襉K隐藏了,让h只看到表面的东东。本文就是针对于此,通过编码的方式Q更加的了解spring ioc的实现机制?br /> <br /> Spring IoC 容器和上下文的初始化包括Bean定义信息的资源定位,载入和注册过E,q里采用了硬~码忽略掉定义信息的资源定位q一环节?br /> <span style="color: #404cff"><br /> </span><span style="color: #303dff">DefaultSingletonBeanRegistry<br />    ---AbstractBeanFactory<br />       ---AbstractAutowireCapableBeanFactory<br />          ---DefaultListableBeanFactory<br />             ---XmlBeanFactory</span><br /> <br /> XmlBeanFactory把DefaultListableBeanFactory作ؓioc容器的实?br /> <br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff">public</span><span style="color: #000000"> XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory)<br />         </span><span style="color: #0000ff">throws</span><span style="color: #000000"> BeansException<br />     {<br />         </span><span style="color: #0000ff">super</span><span style="color: #000000">(parentBeanFactory);<br />         reader </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> XmlBeanDefinitionReader(</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />         reader.loadBeanDefinitions(resource);<br />     }</span></div> <br /> 下面先介l下几个概念Q?br /> <span style="color: #303dff">BeanDefinition </span>Bean定义信息<br /> <span style="color: #303dff">BeanFactory </span>Bean工厂<br /> <span style="color: #303dff">BeanDefinitionRegistry </span>注册器的接口<br /> <span style="color: #303dff">MutablePropertyValues </span>属性集合类<br /> <span style="color: #303dff">RootBeanDefinition </span>BeanDefinition的实?br /> <br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_35_262_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_262_Open_Text.style.display='none'; Codehighlighter1_35_262_Closed_Image.style.display='inline'; Codehighlighter1_35_262_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_35_262_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_35_262_Closed_Text.style.display='none'; Codehighlighter1_35_262_Open_Image.style.display='inline'; Codehighlighter1_35_262_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> DaoA </span><span style="color: #0000ff">implements</span><span style="color: #000000"> IDaoA </span><span id="Codehighlighter1_35_262_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_35_262_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">private</span><span style="color: #000000"> String param;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /> <img id="Codehighlighter1_89_148_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_148_Open_Text.style.display='none'; Codehighlighter1_89_148_Closed_Image.style.display='inline'; Codehighlighter1_89_148_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_89_148_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_89_148_Closed_Text.style.display='none'; Codehighlighter1_89_148_Open_Image.style.display='inline'; Codehighlighter1_89_148_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> operationA() </span><span id="Codehighlighter1_89_148_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_89_148_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">DaoA.operationA(</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> param </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_177_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_177_196_Open_Text.style.display='none'; Codehighlighter1_177_196_Closed_Image.style.display='inline'; Codehighlighter1_177_196_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_177_196_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_177_196_Closed_Text.style.display='none'; Codehighlighter1_177_196_Open_Image.style.display='inline'; Codehighlighter1_177_196_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> String getParam() </span><span id="Codehighlighter1_177_196_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_177_196_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> param;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_235_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_235_260_Open_Text.style.display='none'; Codehighlighter1_235_260_Closed_Image.style.display='inline'; Codehighlighter1_235_260_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_235_260_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_235_260_Closed_Text.style.display='none'; Codehighlighter1_235_260_Open_Image.style.display='inline'; Codehighlighter1_235_260_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setParam(String param) </span><span id="Codehighlighter1_235_260_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_235_260_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.param </span><span style="color: #000000">=</span><span style="color: #000000"> param;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img id="Codehighlighter1_300_377_Open_Image" onclick="this.style.display='none'; Codehighlighter1_300_377_Open_Text.style.display='none'; Codehighlighter1_300_377_Closed_Image.style.display='inline'; Codehighlighter1_300_377_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_300_377_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_300_377_Closed_Text.style.display='none'; Codehighlighter1_300_377_Open_Image.style.display='inline'; Codehighlighter1_300_377_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> DaoB </span><span style="color: #0000ff">implements</span><span style="color: #000000"> IDaoB </span><span id="Codehighlighter1_300_377_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_300_377_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_329_375_Open_Image" onclick="this.style.display='none'; Codehighlighter1_329_375_Open_Text.style.display='none'; Codehighlighter1_329_375_Closed_Image.style.display='inline'; Codehighlighter1_329_375_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_329_375_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_329_375_Closed_Text.style.display='none'; Codehighlighter1_329_375_Open_Image.style.display='inline'; Codehighlighter1_329_375_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> operationB() </span><span id="Codehighlighter1_329_375_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_329_375_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">DaoB.operationB()</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br /> <img id="Codehighlighter1_420_879_Open_Image" onclick="this.style.display='none'; Codehighlighter1_420_879_Open_Text.style.display='none'; Codehighlighter1_420_879_Closed_Image.style.display='inline'; Codehighlighter1_420_879_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_420_879_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_420_879_Closed_Text.style.display='none'; Codehighlighter1_420_879_Open_Image.style.display='inline'; Codehighlighter1_420_879_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Service </span><span style="color: #0000ff">implements</span><span style="color: #000000"> IService </span><span id="Codehighlighter1_420_879_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_420_879_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">private</span><span style="color: #000000"> IDaoA daoA </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">private</span><span style="color: #000000"> IDaoB daoB </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /> <img id="Codehighlighter1_506_669_Open_Image" onclick="this.style.display='none'; Codehighlighter1_506_669_Open_Text.style.display='none'; Codehighlighter1_506_669_Closed_Image.style.display='inline'; Codehighlighter1_506_669_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_506_669_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_506_669_Closed_Text.style.display='none'; Codehighlighter1_506_669_Open_Image.style.display='inline'; Codehighlighter1_506_669_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> service() </span><span id="Codehighlighter1_506_669_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_506_669_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">********service begin ***********</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        daoA.operationA();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        daoB.operationB();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">********service end *************</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_696_714_Open_Image" onclick="this.style.display='none'; Codehighlighter1_696_714_Open_Text.style.display='none'; Codehighlighter1_696_714_Closed_Image.style.display='inline'; Codehighlighter1_696_714_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_696_714_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_696_714_Closed_Text.style.display='none'; Codehighlighter1_696_714_Open_Image.style.display='inline'; Codehighlighter1_696_714_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> IDaoA getDaoA() </span><span id="Codehighlighter1_696_714_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_696_714_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> daoA;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_750_773_Open_Image" onclick="this.style.display='none'; Codehighlighter1_750_773_Open_Text.style.display='none'; Codehighlighter1_750_773_Closed_Image.style.display='inline'; Codehighlighter1_750_773_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_750_773_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_750_773_Closed_Text.style.display='none'; Codehighlighter1_750_773_Open_Image.style.display='inline'; Codehighlighter1_750_773_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setDaoA(IDaoA daoA) </span><span id="Codehighlighter1_750_773_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_750_773_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.daoA </span><span style="color: #000000">=</span><span style="color: #000000"> daoA;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_800_818_Open_Image" onclick="this.style.display='none'; Codehighlighter1_800_818_Open_Text.style.display='none'; Codehighlighter1_800_818_Closed_Image.style.display='inline'; Codehighlighter1_800_818_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_800_818_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_800_818_Closed_Text.style.display='none'; Codehighlighter1_800_818_Open_Image.style.display='inline'; Codehighlighter1_800_818_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> IDaoB getDaoB() </span><span id="Codehighlighter1_800_818_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_800_818_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> daoB;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_854_877_Open_Image" onclick="this.style.display='none'; Codehighlighter1_854_877_Open_Text.style.display='none'; Codehighlighter1_854_877_Closed_Image.style.display='inline'; Codehighlighter1_854_877_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_854_877_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_854_877_Closed_Text.style.display='none'; Codehighlighter1_854_877_Open_Image.style.display='inline'; Codehighlighter1_854_877_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setDaoB(IDaoB daoB) </span><span id="Codehighlighter1_854_877_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_854_877_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.daoB </span><span style="color: #000000">=</span><span style="color: #000000"> daoB;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.beans.MutablePropertyValues;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.beans.factory.BeanFactory;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.beans.factory.config.RuntimeBeanReference;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.beans.factory.support.BeanDefinitionRegistry;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.beans.factory.support.DefaultListableBeanFactory;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.beans.factory.support.RootBeanDefinition;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img id="Codehighlighter1_1307_2689_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1307_2689_Open_Text.style.display='none'; Codehighlighter1_1307_2689_Closed_Image.style.display='inline'; Codehighlighter1_1307_2689_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1307_2689_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1307_2689_Closed_Text.style.display='none'; Codehighlighter1_1307_2689_Open_Image.style.display='inline'; Codehighlighter1_1307_2689_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> HardCodeIoc </span><span id="Codehighlighter1_1307_2689_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_1307_2689_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_1350_2687_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1350_2687_Open_Text.style.display='none'; Codehighlighter1_1350_2687_Closed_Image.style.display='inline'; Codehighlighter1_1350_2687_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1350_2687_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1350_2687_Closed_Text.style.display='none'; Codehighlighter1_1350_2687_Open_Image.style.display='inline'; Codehighlighter1_1350_2687_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) </span><span id="Codehighlighter1_1350_2687_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://m.tkk7.com/Images/dot.gif" /></span><span id="Codehighlighter1_1350_2687_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #008000">//</span><span style="color: #008000"> 注册?/span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">        BeanDefinitionRegistry register </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> DefaultListableBeanFactory();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /> <img id="Codehighlighter1_1436_1466_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1436_1466_Open_Text.style.display='none'; Codehighlighter1_1436_1466_Closed_Image.style.display='inline'; Codehighlighter1_1436_1466_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1436_1466_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1436_1466_Closed_Text.style.display='none'; Codehighlighter1_1436_1466_Open_Image.style.display='inline'; Codehighlighter1_1436_1466_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1436_1466_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">/**/</span><span id="Codehighlighter1_1436_1466_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"> DaoA的属性集(DaoB没有属性这里就不做表示) </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        MutablePropertyValues daoAProperties </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> MutablePropertyValues();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        daoAProperties.addPropertyValue(</span><span style="color: #000000">"</span><span style="color: #000000">param</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">"</span><span style="color: #000000">param1</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /> <img id="Codehighlighter1_1597_1613_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1597_1613_Open_Text.style.display='none'; Codehighlighter1_1597_1613_Closed_Image.style.display='inline'; Codehighlighter1_1597_1613_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1597_1613_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1597_1613_Closed_Text.style.display='none'; Codehighlighter1_1597_1613_Open_Image.style.display='inline'; Codehighlighter1_1597_1613_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1597_1613_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">/**/</span><span id="Codehighlighter1_1597_1613_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"> Service的属性集 </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        MutablePropertyValues serviceProperties </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> MutablePropertyValues();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        serviceProperties.addPropertyValue(</span><span style="color: #000000">"</span><span style="color: #000000">daoA</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">new</span><span style="color: #000000"> RuntimeBeanReference(</span><span style="color: #000000">"</span><span style="color: #000000">daoA</span><span style="color: #000000">"</span><span style="color: #000000">));<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        serviceProperties.addPropertyValue(</span><span style="color: #000000">"</span><span style="color: #000000">daoB</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">new</span><span style="color: #000000"> RuntimeBeanReference(</span><span style="color: #000000">"</span><span style="color: #000000">daoB</span><span style="color: #000000">"</span><span style="color: #000000">));<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /> <img id="Codehighlighter1_1853_1888_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1853_1888_Open_Text.style.display='none'; Codehighlighter1_1853_1888_Closed_Image.style.display='inline'; Codehighlighter1_1853_1888_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1853_1888_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1853_1888_Closed_Text.style.display='none'; Codehighlighter1_1853_1888_Open_Image.style.display='inline'; Codehighlighter1_1853_1888_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1853_1888_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">/**/</span><span id="Codehighlighter1_1853_1888_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"> 分别构造DaoA,DaoB,Service的Bean定义信息 </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        RootBeanDefinition daoADefinition </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> RootBeanDefinition(DaoA.</span><span style="color: #0000ff">class</span><span style="color: #000000">, daoAProperties);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        RootBeanDefinition daoBDefinition </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> RootBeanDefinition(DaoB.</span><span style="color: #0000ff">class</span><span style="color: #000000">, </span><span style="color: #0000ff">null</span><span style="color: #000000">);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        RootBeanDefinition serviceDefinition </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> RootBeanDefinition(Service.</span><span style="color: #0000ff">class</span><span style="color: #000000">, serviceProperties);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /> <img id="Codehighlighter1_2164_2192_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2164_2192_Open_Text.style.display='none'; Codehighlighter1_2164_2192_Closed_Image.style.display='inline'; Codehighlighter1_2164_2192_Closed_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2164_2192_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2164_2192_Closed_Text.style.display='none'; Codehighlighter1_2164_2192_Open_Image.style.display='inline'; Codehighlighter1_2164_2192_Open_Text.style.display='inline';" alt="" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_2164_2192_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">/**/</span><span id="Codehighlighter1_2164_2192_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"> 把DaoA,DaoB,Service注册到工?nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        register.registerBeanDefinition(</span><span style="color: #000000">"</span><span style="color: #000000">daoA</span><span style="color: #000000">"</span><span style="color: #000000">, daoADefinition);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        register.registerBeanDefinition(</span><span style="color: #000000">"</span><span style="color: #000000">daoB</span><span style="color: #000000">"</span><span style="color: #000000">, daoBDefinition);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        register.registerBeanDefinition(</span><span style="color: #000000">"</span><span style="color: #000000">service</span><span style="color: #000000">"</span><span style="color: #000000">, serviceDefinition);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #008000">//</span><span style="color: #008000"> 转化为Bean工厂容器</span><span style="color: #008000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">        BeanFactory beanFactory </span><span style="color: #000000">=</span><span style="color: #000000"> (BeanFactory) register;<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        IDaoA daoA </span><span style="color: #000000">=</span><span style="color: #000000"> (IDaoA) beanFactory.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">daoA</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        IDaoB daoB </span><span style="color: #000000">=</span><span style="color: #000000"> (IDaoB) beanFactory.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">daoB</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        IService service </span><span style="color: #000000">=</span><span style="color: #000000"> (IService) beanFactory.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">service</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        daoA.operationA();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        daoB.operationB();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        service.service();<br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <br /> 打印l果如下Q?br /> DaoA.operationA(param1)<br /> DaoB.operationB()<br /> ********service begin ***********<br /> DaoA.operationA(param1)<br /> DaoB.operationB()<br /> ********service end *************<br /> <br /> 了解了这几个概念后就可以利用BeanFactory的后配置处理配合annotationq行自动注入了,省却了xml配置的麻烦?br /> <img src ="http://m.tkk7.com/Jluoguang/aggbug/245820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Jluoguang/" target="_blank">永远的火焰舞?/a> 2008-12-12 02:26 <a href="http://m.tkk7.com/Jluoguang/archive/2008/12/12/245820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://xinyuanmy.com" target="_blank">ۺɫAPP</a>| <a href="http://xiaochidaquan.com" target="_blank">ɫվѹۿ</a>| <a href="http://bjsymsdwl.com" target="_blank">վ߹ۿ</a>| <a href="http://pufenghotel.com" target="_blank">Ůxx00ƵԿ</a>| <a href="http://23usxx.com" target="_blank">˳վ߹ۿ</a>| <a href="http://bdgxhome.com" target="_blank">Ƶѹۿˬˬˬ</a>| <a href="http://www-741.com" target="_blank">˳վ߹ۿ</a>| <a href="http://beijinzhongliuyiyuan.com" target="_blank">һ</a>| <a href="http://huahui1866.com" target="_blank">Ʒþ</a>| <a href="http://44od.com" target="_blank">һëƬѲ</a>| <a href="http://qq-gm.com" target="_blank">ŮƵַ</a>| <a href="http://dazngt.com" target="_blank">޳?߹ۿ</a>| <a href="http://shulan88.com" target="_blank">Ļ߹ۿձ</a>| <a href="http://dqmovie.com" target="_blank">պa</a>| <a href="http://sijep.com" target="_blank">Ƶһ</a>| <a href="http://bjsymsdwl.com" target="_blank">?VþþƷ</a>| <a href="http://kdltuliao.com" target="_blank">ƷŮٸaѾþ</a>| <a href="http://zisewang.com" target="_blank">ѹվ߹ۿҪ</a>| <a href="http://k9l4.com" target="_blank">鶹Ʒý</a>| <a href="http://hidiaoyan.com" target="_blank">޹˾Ʒþþþþۺ</a>| <a href="http://352362.com" target="_blank">jŮjڲվ</a>| <a href="http://100357.com" target="_blank">޹˾þþƷţӰ</a>| <a href="http://mmstom.com" target="_blank">þþþavר</a>| <a href="http://fdsyjy.com" target="_blank">޳AƬ77777</a>| <a href="http://zjztauto.com" target="_blank">91ƵѲ</a>| <a href="http://591se591se.com" target="_blank">ˬִ̼վֱ</a>| <a href="http://51a88.com" target="_blank">޹AV</a>| <a href="http://zbsensor.com" target="_blank">77777_ҹþö</a>| <a href="http://dghxm168.com" target="_blank">Ʒ˳</a>| <a href="http://spxingyiquan.com" target="_blank">ŷߵӰ</a>| <a href="http://kkjk123.com" target="_blank">ҹƵ</a>| <a href="http://hnkangshi.com" target="_blank">99þþþþѿ</a>| <a href="http://12345ww.com" target="_blank">޾ƷóƬAV߲</a>| <a href="http://adcadm.com" target="_blank">þAV</a>| <a href="http://yimintech.com" target="_blank">˳ŷþ</a>| <a href="http://dfcnpc.com" target="_blank">ֳִִˬƵ</a>| <a href="http://hqshimo.com" target="_blank">ѻɫƬվ</a>| <a href="http://33a55.com" target="_blank">һѹۿƵİ</a>| <a href="http://zhaofeiz.com" target="_blank">ҹƷ߹ۿ</a>| <a href="http://laosanqq.com" target="_blank">Ůվ91ɫ</a>| <a href="http://532342.com" target="_blank">ŷһëƬѿ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>