??xml version="1.0" encoding="utf-8" standalone="yes"?>国产一级在线观看,日韩成人一区二区三区在线观看,亚洲在线国产日韩欧美http://www.aygfsteel.com/beauty_beast/category/7387.html上善若水 厚d载物 zh-cnWed, 28 Feb 2007 06:04:14 GMTWed, 28 Feb 2007 06:04:14 GMT60URLClassLoader加蝲class到当前线E类加蝲?/title><link>http://www.aygfsteel.com/beauty_beast/archive/2006/09/26/71981.html</link><dc:creator>柳随?/dc:creator><author>柳随?/author><pubDate>Tue, 26 Sep 2006 07:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/beauty_beast/archive/2006/09/26/71981.html</guid><wfw:comment>http://www.aygfsteel.com/beauty_beast/comments/71981.html</wfw:comment><comments>http://www.aygfsteel.com/beauty_beast/archive/2006/09/26/71981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/beauty_beast/comments/commentRss/71981.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/beauty_beast/services/trackbacks/71981.html</trackback:ping><description><![CDATA[ <p>本文完全转自<a href="/hiswing/archive/2006/08/25/65764.html">http://www.aygfsteel.com/hiswing/archive/2006/08/25/65764.html</a><br /> 我们知道QJava利用ClassLoader类载入内存Qƈ且在同一应用中,可以有很多个ClassLoaderQ通过委派机制Q把装蝲的Q务传递给上的装载器的,依次cLQ直到启动类装蝲器(没有上c装载器Q。如果启动类装蝲器能够装载这个类Q那么它会首先装载。如果不能,则往下传递。当父类为nullӞJVM内置的类(UCؓ:bootstrap class loader)׃充当父类。想想眼下的来多用XML文g做配|文件或者是描述W、部|符。其实这些通过XML文档描述的配|信息最l都要变成Javac,基实都是通过ClassLoader来完成的。URLClassLoader是ClassLoader的子c,它用于从指向 JAR 文g和目录的 URL 的搜索\径加载类和资源。也是_通过URLClassLoader可以加载指定jar中的class到内存中?/p> <p>下面来看一个例子,在该例子中,我们要完成的工作是利用URLClassLoader加蝲jarq运行其中的cȝ某个Ҏ?/p> <p>首先我们定义一个接口,使所有承它的类都必d现actionҎQ如下:</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 id="Codehighlighter1_33_63_Open_Image" onclick="this.style.display='none'; Codehighlighter1_33_63_Open_Text.style.display='none'; Codehighlighter1_33_63_Closed_Image.style.display='inline'; Codehighlighter1_33_63_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_33_63_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_33_63_Closed_Text.style.display='none'; Codehighlighter1_33_63_Open_Image.style.display='inline'; Codehighlighter1_33_63_Open_Text.style.display='inline';" src="http://www.aygfsteel.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"> ActionInterface </span> <span id="Codehighlighter1_33_63_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_33_63_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> String action();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> </div> <p>完成后将其打包ؓtestInterface.jar文g?/p> <p>接下来新Z工程Qؓ了编译通过Q引入之前打好的testInterface.jar包。ƈ创徏TestActionc,使它实现ActionInterface接口。如下:</p> <p> </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 id="Codehighlighter1_51_135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_51_135_Open_Text.style.display='none'; Codehighlighter1_51_135_Closed_Image.style.display='inline'; Codehighlighter1_51_135_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_51_135_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_51_135_Closed_Text.style.display='none'; Codehighlighter1_51_135_Open_Image.style.display='inline'; Codehighlighter1_51_135_Open_Text.style.display='inline';" src="http://www.aygfsteel.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"> TestAction </span> <span style="COLOR: #0000ff">implements</span> <span style="COLOR: #000000"> ActionInterface </span> <span id="Codehighlighter1_51_135_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_51_135_Open_Text"> <span style="COLOR: #000000">{<br /><img id="Codehighlighter1_80_133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_80_133_Open_Text.style.display='none'; Codehighlighter1_80_133_Closed_Image.style.display='inline'; Codehighlighter1_80_133_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_80_133_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_80_133_Closed_Text.style.display='none'; Codehighlighter1_80_133_Open_Image.style.display='inline'; Codehighlighter1_80_133_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> String action() </span> <span id="Codehighlighter1_80_133_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_80_133_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">com.mxjava.TestAction.action</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </div> <p>完成后将其打包ؓtest.jarQ放在c盘根目录下。下面要做的是利用URLClassLoader加蝲q运行TestAction的actionҎQƈ返回的值打印在控制C?/p> <p>新徏一工程Q引入testInterface.jar包。ƈ创徏一可执行类QmainҎQ,在其中加入如下代码:</p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">URL url </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> URL(“file:C:</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">test.jar?;<br /><img id="Codehighlighter1_99_105_Open_Image" onclick="this.style.display='none'; Codehighlighter1_99_105_Open_Text.style.display='none'; Codehighlighter1_99_105_Closed_Image.style.display='inline'; Codehighlighter1_99_105_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_99_105_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_99_105_Closed_Text.style.display='none'; Codehighlighter1_99_105_Open_Image.style.display='inline'; Codehighlighter1_99_105_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />URLClassLoader myClassLoader </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> URLClassLoader(</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> URL[] </span> <span id="Codehighlighter1_99_105_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_99_105_Open_Text"> <span style="COLOR: #000000">{ url }</span> </span> <span style="COLOR: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />Class myClass </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> myClassLoader.loadClass(“com.mxjava.TestAction?;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />ActionInterface action </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> (ActionInterface)myClass.newInstance();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />System.out.println(action.action());</span> </div> <p>  在上面的例子中,首先利用URLClassLoader加蝲了C:\test.jar包,其中的com.mxjava.TestActionc蝲入内存,其强制转型为testInterface包中的ActionInterfacecdQ最后调用其actionҎQƈ打印到控制台中?/p> <p>  执行E序后,在控制台上如期打印出我们惌的内宏V但是,事情q没有那么简单,当我们将该代码移动web应用中时Q就会抛出异常。原来,Java为我们提供了三种可选择的ClassLoaderQ?br />1. pȝcd载器或叫作应用类加蝲?(system classloader or application classloader)<br />2. 当前cd载器<br />3. 当前U程cd载器</p> <p>  在上例中我们使用javac命o来运行该E序Q这时候用的是系l类加蝲?(system classloader)。这个类加蝲器处?-classpath下的cd载工作,可以通过ClassLoader.getSystemClassLoader()Ҏ调用?ClassLoader 下所有的 getSystemXXX()的静态方法都是通过q个Ҏ定义的。在代码中,应该量地调用q个ҎQ以其它的类加蝲器作Z理。否则代码将只能工作在简单的命o行应用中。当在web应用中时Q服务器也是利用ClassLoader来加载class的,׃ClassLoader的不同,所以在强制转型时JVM认定不是同一cd。(在JAVA中,一个类用其完全匚wcd(fully qualified class name)作ؓ标识Q这里指的完全匹配类名包括包名和cd。但在JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识。因此,如果一个名为Pg的包中,有一个名为Cl的类Q被cd载器KlassLoader的一个实例kl1加蝲QCl的实例,即C1.class在JVM中表CZؓ(Cl, Pg, kl1)。这意味着两个cd载器的实?Cl, Pg, kl1) ?(Cl, Pg, kl2)是不同的Q被它们所加蝲的类也因此完全不同,互不兼容的。)Z能够使程序正运行,我们首要解决的问题就是,如何URLClassLoader加蝲的类Q同当前ClassLoader保持在同一cd载器中。解x法很单,利用java提供的第三种ClassLoader—当前线E类加蝲器即可。jdk api文档׃发现QURLClassLoader提供了三U构造方式:</p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">使用默认的委托父 ClassLoader 为指定的 URL 构造一个新 URLClassLoader。?/span> <span style="COLOR: #008000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000">URLClassLoader(URL[] urls) <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">为给定的 URL 构造新 URLClassLoader。?/span> <span style="COLOR: #008000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000">URLClassLoader(URL[] urls, ClassLoader parent) <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">为指定的 URL、父cd载器和 URLStreamHandlerFactory 创徏斊WURLClassLoader?/span> <span style="COLOR: #008000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000">URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory) </span> </div> <p>接下来要做的是Q在构造URLClassLoaderӞ当前线E类加蝲器置入即可。如下:</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 id="Codehighlighter1_60_66_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_66_Open_Text.style.display='none'; Codehighlighter1_60_66_Closed_Image.style.display='inline'; Codehighlighter1_60_66_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_60_66_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_66_Closed_Text.style.display='none'; Codehighlighter1_60_66_Open_Image.style.display='inline'; Codehighlighter1_60_66_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> <span style="COLOR: #000000">URLClassLoader myClassLoader </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> URLClassLoader(</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> URL[] </span> <span id="Codehighlighter1_60_66_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_60_66_Open_Text"> <span style="COLOR: #000000">{ url }</span> </span> <span style="COLOR: #000000">, Thread.currentThread().getContextClassLoader());</span> </div> <p> <strong>ȝQ?br />  </strong>Java是利用ClassLoader来加载类到内存的QClassLoader本n是用java语言写的Q所以我们可以扩展自qClassLoader。利用URLClassLoader可以加蝲指定jar包中的类到内存。在命行上利用URLClassLoader加蝲jarӞ是用系l类加蝲器来加蝲class的,所以在web环境下,׃出错。这是因为JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识的。我们只要利用URLClassLoader的第二种构造方法ƈ传入当前U程cd载器卛_解决?br /><br /><em>参考:<br /></em><a href="/sharajava/archive/2006/07/25/59946.html"><em>http://www.aygfsteel.com/sharajava/archive/2006/07/25/59946.html</em></a><br /><a ><em>http://kb.csdn.net/java/Articles/200510/a1843d60-05b1-456f-9f72-811cb45ea4ae.html</em></a><br /></p> <img src ="http://www.aygfsteel.com/beauty_beast/aggbug/71981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/beauty_beast/" target="_blank">柳随?/a> 2006-09-26 15:14 <a href="http://www.aygfsteel.com/beauty_beast/archive/2006/09/26/71981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>反射之私有构造函数、属性、方?/title><link>http://www.aygfsteel.com/beauty_beast/archive/2006/05/15/46264.html</link><dc:creator>柳随?/dc:creator><author>柳随?/author><pubDate>Mon, 15 May 2006 10:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/beauty_beast/archive/2006/05/15/46264.html</guid><wfw:comment>http://www.aygfsteel.com/beauty_beast/comments/46264.html</wfw:comment><comments>http://www.aygfsteel.com/beauty_beast/archive/2006/05/15/46264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/beauty_beast/comments/commentRss/46264.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/beauty_beast/services/trackbacks/46264.html</trackback:ping><description><![CDATA[ <p>我一直以为类的私有构造函数、属性、方法除了类自n其他cL无法讉K的,前几天正好学习Spring框架Q在学习Spring框架基础 Bean包时Q写了一个简单的例子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 src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff">package</span> <span style="COLOR: #000000"> study.spring.bean;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.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"> SimpleBean<br /><img id="Codehighlighter1_52_451_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_451_Open_Text.style.display='none'; Codehighlighter1_52_451_Closed_Image.style.display='inline'; Codehighlighter1_52_451_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_52_451_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_52_451_Closed_Text.style.display='none'; Codehighlighter1_52_451_Open_Image.style.display='inline'; Codehighlighter1_52_451_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span> <span id="Codehighlighter1_52_451_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_52_451_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000"> String beanName;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_117_173_Open_Image" onclick="this.style.display='none'; Codehighlighter1_117_173_Open_Text.style.display='none'; Codehighlighter1_117_173_Closed_Image.style.display='inline'; Codehighlighter1_117_173_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_117_173_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_117_173_Closed_Text.style.display='none'; Codehighlighter1_117_173_Open_Image.style.display='inline'; Codehighlighter1_117_173_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000"> SimpleBean()</span> <span id="Codehighlighter1_117_173_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_117_173_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">SimpleBean </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />      <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /> <br /> <img id="Codehighlighter1_180_227_Open_Image" onclick="this.style.display='none'; Codehighlighter1_180_227_Open_Text.style.display='none'; Codehighlighter1_180_227_Closed_Image.style.display='inline'; Codehighlighter1_180_227_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_180_227_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_180_227_Closed_Text.style.display='none'; Codehighlighter1_180_227_Open_Image.style.display='inline'; Codehighlighter1_180_227_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span> <span id="Codehighlighter1_180_227_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_180_227_Open_Text"> <span style="COLOR: #008000">/**</span> <span style="COLOR: #008000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />     * </span> <span style="COLOR: #808080">@return</span> <span style="COLOR: #008000"> Returns the beanName.<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span> <span style="COLOR: #008000">*/</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> String getBeanName()<br /><img id="Codehighlighter1_265_296_Open_Image" onclick="this.style.display='none'; Codehighlighter1_265_296_Open_Text.style.display='none'; Codehighlighter1_265_296_Closed_Image.style.display='inline'; Codehighlighter1_265_296_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_265_296_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_265_296_Closed_Text.style.display='none'; Codehighlighter1_265_296_Open_Image.style.display='inline'; Codehighlighter1_265_296_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span> <span id="Codehighlighter1_265_296_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_265_296_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> beanName;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /> <br /> <img id="Codehighlighter1_303_357_Open_Image" onclick="this.style.display='none'; Codehighlighter1_303_357_Open_Text.style.display='none'; Codehighlighter1_303_357_Closed_Image.style.display='inline'; Codehighlighter1_303_357_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_303_357_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_303_357_Closed_Text.style.display='none'; Codehighlighter1_303_357_Open_Image.style.display='inline'; Codehighlighter1_303_357_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span> <span id="Codehighlighter1_303_357_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_303_357_Open_Text"> <span style="COLOR: #008000">/**</span> <span style="COLOR: #008000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />     * </span> <span style="COLOR: #808080">@param</span> <span style="COLOR: #008000"> beanName The beanName to set.<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span> <span style="COLOR: #008000">*/</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.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"> setBeanName(String beanName)<br /><img id="Codehighlighter1_408_448_Open_Image" onclick="this.style.display='none'; Codehighlighter1_408_448_Open_Text.style.display='none'; Codehighlighter1_408_448_Closed_Image.style.display='inline'; Codehighlighter1_408_448_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_408_448_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_408_448_Closed_Text.style.display='none'; Codehighlighter1_408_448_Open_Image.style.display='inline'; Codehighlighter1_408_448_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span> <span id="Codehighlighter1_408_448_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_408_448_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span> <span style="COLOR: #0000ff">this</span> <span style="COLOR: #000000">.beanName </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> beanName;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </div> <br />发现居然也能调用成功Q当时很惊讶Q反机制^时在以前的项目中也常使用Q但不能构造只有私有构造函数的cR?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 src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> study.spring.bean;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.lang.reflect.Constructor;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.lang.reflect.InvocationTargetException;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.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"> SimpleTest<br /><img id="Codehighlighter1_142_1413_Open_Image" onclick="this.style.display='none'; Codehighlighter1_142_1413_Open_Text.style.display='none'; Codehighlighter1_142_1413_Closed_Image.style.display='inline'; Codehighlighter1_142_1413_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_142_1413_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_142_1413_Closed_Text.style.display='none'; Codehighlighter1_142_1413_Open_Image.style.display='inline'; Codehighlighter1_142_1413_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_142_1413_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_142_1413_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_149_178_Open_Image" onclick="this.style.display='none'; Codehighlighter1_149_178_Open_Text.style.display='none'; Codehighlighter1_149_178_Closed_Image.style.display='inline'; Codehighlighter1_149_178_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_149_178_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_149_178_Closed_Text.style.display='none'; Codehighlighter1_149_178_Open_Image.style.display='inline'; Codehighlighter1_149_178_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_149_178_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_149_178_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> args<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.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)<br /><img id="Codehighlighter1_227_1410_Open_Image" onclick="this.style.display='none'; Codehighlighter1_227_1410_Open_Text.style.display='none'; Codehighlighter1_227_1410_Closed_Image.style.display='inline'; Codehighlighter1_227_1410_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_227_1410_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_227_1410_Closed_Text.style.display='none'; Codehighlighter1_227_1410_Open_Image.style.display='inline'; Codehighlighter1_227_1410_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_227_1410_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_227_1410_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_292_549_Open_Image" onclick="this.style.display='none'; Codehighlighter1_292_549_Open_Text.style.display='none'; Codehighlighter1_292_549_Closed_Image.style.display='inline'; Codehighlighter1_292_549_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_292_549_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_292_549_Closed_Text.style.display='none'; Codehighlighter1_292_549_Open_Image.style.display='inline'; Codehighlighter1_292_549_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_292_549_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_292_549_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            Constructor[] cts</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Class.forName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">study.spring.bean.SimpleBean</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).getDeclaredConstructors();<br /><img id="Codehighlighter1_438_528_Open_Image" onclick="this.style.display='none'; Codehighlighter1_438_528_Open_Text.style.display='none'; Codehighlighter1_438_528_Closed_Image.style.display='inline'; Codehighlighter1_438_528_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_438_528_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_438_528_Closed_Text.style.display='none'; Codehighlighter1_438_528_Open_Image.style.display='inline'; Codehighlighter1_438_528_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">cts.length;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id="Codehighlighter1_438_528_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_438_528_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />                cts[i].newInstance(</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />                <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />                <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />          <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (SecurityException e)<br /><img id="Codehighlighter1_595_685_Open_Image" onclick="this.style.display='none'; Codehighlighter1_595_685_Open_Text.style.display='none'; Codehighlighter1_595_685_Closed_Image.style.display='inline'; Codehighlighter1_595_685_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_595_685_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_595_685_Closed_Text.style.display='none'; Codehighlighter1_595_685_Open_Image.style.display='inline'; Codehighlighter1_595_685_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_595_685_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_595_685_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated catch block</span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (ClassNotFoundException e)<br /><img id="Codehighlighter1_736_826_Open_Image" onclick="this.style.display='none'; Codehighlighter1_736_826_Open_Text.style.display='none'; Codehighlighter1_736_826_Closed_Image.style.display='inline'; Codehighlighter1_736_826_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_736_826_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_736_826_Closed_Text.style.display='none'; Codehighlighter1_736_826_Open_Image.style.display='inline'; Codehighlighter1_736_826_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_736_826_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_736_826_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated catch block</span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (IllegalArgumentException e)<br /><img id="Codehighlighter1_879_969_Open_Image" onclick="this.style.display='none'; Codehighlighter1_879_969_Open_Text.style.display='none'; Codehighlighter1_879_969_Closed_Image.style.display='inline'; Codehighlighter1_879_969_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_879_969_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_879_969_Closed_Text.style.display='none'; Codehighlighter1_879_969_Open_Image.style.display='inline'; Codehighlighter1_879_969_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_879_969_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_879_969_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated catch block</span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (InstantiationException e)<br /><img id="Codehighlighter1_1020_1110_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1020_1110_Open_Text.style.display='none'; Codehighlighter1_1020_1110_Closed_Image.style.display='inline'; Codehighlighter1_1020_1110_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1020_1110_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1020_1110_Closed_Text.style.display='none'; Codehighlighter1_1020_1110_Open_Image.style.display='inline'; Codehighlighter1_1020_1110_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1020_1110_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_1020_1110_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated catch block</span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (IllegalAccessException e)<br /><img id="Codehighlighter1_1161_1251_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1161_1251_Open_Text.style.display='none'; Codehighlighter1_1161_1251_Closed_Image.style.display='inline'; Codehighlighter1_1161_1251_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1161_1251_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1161_1251_Closed_Text.style.display='none'; Codehighlighter1_1161_1251_Open_Image.style.display='inline'; Codehighlighter1_1161_1251_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1161_1251_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_1161_1251_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated catch block</span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (InvocationTargetException e)<br /><img id="Codehighlighter1_1305_1395_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1305_1395_Open_Text.style.display='none'; Codehighlighter1_1305_1395_Closed_Image.style.display='inline'; Codehighlighter1_1305_1395_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1305_1395_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1305_1395_Closed_Text.style.display='none'; Codehighlighter1_1305_1395_Open_Image.style.display='inline'; Codehighlighter1_1305_1395_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1305_1395_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_1305_1395_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated catch block</span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />       <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><p><br />也是如我所?抛出java.lang.IllegalAccessException异常Q当时就怀疑Spring框架是否使用反射的一些特性,后来查了相关文档才知道原因何在:</p><p>实际上java在反创Z个类的实例时Q默认会是否符合相兛_全,该检开兛_以关闭?br />Constructor、Field、Method都是l承于AccessibleObjectQ对应实例调用setAccessible(true)关闭该开?br />如上面的例子Q在代码<font style="BACKGROUND-COLOR: #ffffff" color="#ff9966"> cts[i].newInstance(null);?/font>前调用上q方法: <font color="#6666ff"> cts[i].setAccessible(true);<br /></font>q样可以创建只有构造函数的实例、调用私有构造方法,讉KcȝU有属性?/p><p>呵呵Q这样好像java安全性就大大降低.如果你非常注重应用的安全性,java当然考虑到这斚wQ你可以在JVM启动参数增加 -Djava.security.manager 启用安全理器,如果有该参数,它将正在关闭接入检的代码是否许可了这样做,上述代码执行时会抛出java.security.AccessControlException异常?br /><br />外话:<br />            对java 安全性方面了解不多,实际开发中也很与之相养I如哪位同行有相关l验Q请多多指教Q谢谢!<br /><br /><br /><br /><br /></p><img src ="http://www.aygfsteel.com/beauty_beast/aggbug/46264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/beauty_beast/" target="_blank">柳随?/a> 2006-05-15 18:35 <a href="http://www.aygfsteel.com/beauty_beast/archive/2006/05/15/46264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java代码静态检?/title><link>http://www.aygfsteel.com/beauty_beast/archive/2006/03/14/35202.html</link><dc:creator>柳随?/dc:creator><author>柳随?/author><pubDate>Tue, 14 Mar 2006 03:30:00 GMT</pubDate><guid>http://www.aygfsteel.com/beauty_beast/archive/2006/03/14/35202.html</guid><wfw:comment>http://www.aygfsteel.com/beauty_beast/comments/35202.html</wfw:comment><comments>http://www.aygfsteel.com/beauty_beast/archive/2006/03/14/35202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/beauty_beast/comments/commentRss/35202.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/beauty_beast/services/trackbacks/35202.html</trackback:ping><description><![CDATA[前段旉要求q行代码查,集合jtest工具静态检查,做了一个检查标准。生成jtest查配|文Ӟ开发h员检查、修改还是比较方便的。故检查标准列出?BR>其实jtest帮助是比较详l的Q基本每个检查标准都有详l的说明Q我׃两天的时间将它详l看了一下,Z汉化Q以后重新定义标准也比较快,也算一个学习心得?BR>下蝲 Q?A HREF="/Files/beauty_beast/code_checklist.rar">http://www.aygfsteel.com/Files/beauty_beast/code_checklist.rar</A><BR><BR><BR><BR><img src ="http://www.aygfsteel.com/beauty_beast/aggbug/35202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/beauty_beast/" target="_blank">柳随?/a> 2006-03-14 11:30 <a href="http://www.aygfsteel.com/beauty_beast/archive/2006/03/14/35202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习设计模式之proxy模式http://www.aygfsteel.com/beauty_beast/archive/2005/08/19/10535.html柳随?/dc:creator>柳随?/author>Fri, 19 Aug 2005 08:58:00 GMThttp://www.aygfsteel.com/beauty_beast/archive/2005/08/19/10535.htmlhttp://www.aygfsteel.com/beauty_beast/comments/10535.htmlhttp://www.aygfsteel.com/beauty_beast/archive/2005/08/19/10535.html#Feedback0http://www.aygfsteel.com/beauty_beast/comments/commentRss/10535.htmlhttp://www.aygfsteel.com/beauty_beast/services/trackbacks/10535.html阅读全文

]]>
վ֩ģ壺 ɽʡ| ɽ| | ɽ| | ˮ| ˮ| | | | | | | ƺ| | | | ǧ| | | | ں| ɽ| ˳| | | ͩ®| ¡| | | | | ղ| ڶ| | | | | ʷ| ϰ| ̶|