﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-beauty_beast-随笔分类-java基础</title><link>http://www.blogjava.net/beauty_beast/category/7387.html</link><description>上善若水   厚德载物 
</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 06:04:14 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 06:04:14 GMT</pubDate><ttl>60</ttl><item><title>URLClassLoader加载class到当前线程类加载器</title><link>http://www.blogjava.net/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.blogjava.net/beauty_beast/archive/2006/09/26/71981.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/71981.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2006/09/26/71981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/71981.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/71981.html</trackback:ping><description><![CDATA[
		<p>本文完全转自<a href="/hiswing/archive/2006/08/25/65764.html">http://www.blogjava.net/hiswing/archive/2006/08/25/65764.html</a><br />　我们知道，Java利用ClassLoader将类载入内存，并且在同一应用中，可以有很多个ClassLoader，通过委派机制，把装载的任务传递给上级的装载器的，依次类推，直到启动类装载器（没有上级类装载器）。如果启动类装载器能够装载这个类，那么它会首先装载。如果不能，则往下传递。当父类为null时，JVM内置的类(称为:bootstrap class loader)就会充当父类。想想眼下的越来越多用XML文件做配置文件或者是描述符、部署符。其实这些通过XML文档描述的配置信息最终都要变成Java类，基实都是通过ClassLoader来完成的。URLClassLoader是ClassLoader的子类，它用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。也就是说，通过URLClassLoader就可以加载指定jar中的class到内存中。</p>
		<p>下面来看一个例子，在该例子中，我们要完成的工作是利用URLClassLoader加载jar并运行其中的类的某个方法。</p>
		<p>首先我们定义一个接口，使所有继承它的类都必须实现action方法，如下：</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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_33_63_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> String action();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>完成后将其打包为testInterface.jar文件。</p>
		<p>接下来新建一工程，为了编译通过，引入之前打好的testInterface.jar包。并创建TestAction类，使它实现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.blogjava.net/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.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> 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.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_80_133_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>完成后将其打包为test.jar，放在c盘根目录下。下面要做的就是利用URLClassLoader加载并运行TestAction的action方法，并将返回的值打印在控制台上。</p>
		<p>新建一工程，引入testInterface.jar包。并创建一可执行类（main方法），在其中加入如下代码：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #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.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/OutliningIndicators/None.gif" align="top" />System.out.println(action.action());</span>
		</div>
		<p>　　在上面的例子中，首先利用URLClassLoader加载了C:\test.jar包，将其中的com.mxjava.TestAction类载入内存，将其强制转型为testInterface包中的ActionInterface类型，最后调用其action方法，并打印到控制台中。</p>
		<p>　　执行程序后，在控制台上如期打印出我们想要的内容。但是，事情并没有那么简单，当我们将该代码移动web应用中时，就会抛出异常。原来，Java为我们提供了三种可选择的ClassLoader：<br />1. 系统类加载器或叫作应用类加载器 (system classloader or application classloader)<br />2. 当前类加载器<br />3. 当前线程类加载器</p>
		<p>　　在上例中我们使用javac命令来运行该程序，这时候使用的是系统类加载器 (system classloader)。这个类加载器处理 -classpath下的类加载工作，可以通过ClassLoader.getSystemClassLoader()方法调用。 ClassLoader 下所有的 getSystemXXX()的静态方法都是通过这个方法定义的。在代码中，应该尽量少地调用这个方法，以其它的类加载器作为代理。否则代码将只能工作在简单的命令行应用中。当在web应用中时，服务器也是利用ClassLoader来加载class的，由于ClassLoader的不同，所以在强制转型时JVM认定不是同一类型。（在JAVA中，一个类用其完全匹配类名(fully qualified class name)作为标识，这里指的完全匹配类名包括包名和类名。但在JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识。因此，如果一个名为Pg的包中，有一个名为Cl的类，被类加载器KlassLoader的一个实例kl1加载，Cl的实例，即C1.class在JVM中表示为(Cl, Pg, kl1)。这意味着两个类加载器的实例(Cl, Pg, kl1) 和 (Cl, Pg, kl2)是不同的，被它们所加载的类也因此完全不同，互不兼容的。）为了能够使程序正确运行，我们首要解决的问题就是，如何将URLClassLoader加载的类，同当前ClassLoader保持在同一类加载器中。解决方法很简单，利用java提供的第三种ClassLoader—当前线程类加载器即可。jdk api文档就会发现，URLClassLoader提供了三种构造方式：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">使用默认的委托父 ClassLoader 为指定的 URL 构造一个新 URLClassLoader。 </span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">URLClassLoader(URL[] urls) <br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">URLClassLoader(URL[] urls, ClassLoader parent) <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">为指定的 URL、父类加载器和 URLStreamHandlerFactory 创建新 URLClassLoader。</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory) </span>
		</div>
		<p>接下来要做的就是，在构造URLClassLoader时，将当前线程类加载器置入即可。如下：</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.blogjava.net/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.blogjava.net/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.blogjava.net/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>总结：<br />　　</strong>Java是利用ClassLoader来加载类到内存的，ClassLoader本身是用java语言写的，所以我们可以扩展自己的ClassLoader。利用URLClassLoader可以加载指定jar包中的类到内存。在命行上利用URLClassLoader加载jar时，是使用系统类加载器来加载class的，所以在web环境下，就会出错。这是因为JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识的。我们只要利用URLClassLoader的第二种构造方法并传入当前线程类加载器即可解决。<br /><br /><em>参考：<br /></em><a href="/sharajava/archive/2006/07/25/59946.html"><em>http://www.blogjava.net/sharajava/archive/2006/07/25/59946.html</em></a><br /><a href="http://kb.csdn.net/java/Articles/200510/a1843d60-05b1-456f-9f72-811cb45ea4ae.html"><em>http://kb.csdn.net/java/Articles/200510/a1843d60-05b1-456f-9f72-811cb45ea4ae.html</em></a><br /></p>
<img src ="http://www.blogjava.net/beauty_beast/aggbug/71981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2006-09-26 15:14 <a href="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/beauty_beast/archive/2006/05/15/46264.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/46264.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2006/05/15/46264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/46264.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/46264.html</trackback:ping><description><![CDATA[
		<p>我一直以为类的私有构造函数、属性、方法除了类自身其他类是无法访问的，前几天正好学习Spring框架，在学习Spring框架基础 Bean包时，写了一个简单的例子，类似如下：<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.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> study.spring.bean;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_52_451_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> String beanName;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_117_173_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_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.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_265_296_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> beanName;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_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.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_408_448_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<br />发现居然也能调用成功，当时很惊讶，反射机制平时在以前的项目中也常使用，但不能构造只有私有构造函数的类。<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.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> study.spring.bean;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.lang.reflect.Constructor;<br /><img src="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_142_1413_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> args<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_227_1410_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_292_549_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/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">&lt;</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.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_438_528_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_595_685_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_736_826_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_879_969_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1020_1110_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1161_1251_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </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.blogjava.net/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.blogjava.net/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.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1305_1395_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><p><br />也是如我所想 抛出java.lang.IllegalAccessException异常，当时就怀疑Spring框架是否使用反射的一些特性，后来查了相关文档才知道原因何在：</p><p>实际上java在反射创建一个类的实例时，默认会检测是否符合相关安全，该检测开关可以关闭。<br />Constructor、Field、Method都是继承于AccessibleObject，对应实例调用setAccessible(true)就关闭该开关<br />如上面的例子，在代码<font style="BACKGROUND-COLOR: #ffffff" color="#ff9966"> cts[i].newInstance(null);行</font>前调用上述方法： <font color="#6666ff"> cts[i].setAccessible(true);<br /></font>这样就可以创建只有构造函数的实例、调用私有构造方法，访问类的私有属性。</p><p>呵呵，这样好像java安全性就大大降低.如果你非常注重应用的安全性，java当然考虑到这方面，你可以在JVM启动参数增加 -Djava.security.manager 启用安全管理器，如果有该参数,它将检测正在关闭接入检测的代码是否许可了这样做,上述代码执行时会抛出java.security.AccessControlException异常。<br /><br />篇外话：<br />            对java 安全性方面了解不多，实际开发中也很少与之相关，如哪位同行有相关经验，请多多指教，谢谢！<br /><br /><br /><br /><br /></p><img src ="http://www.blogjava.net/beauty_beast/aggbug/46264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2006-05-15 18:35 <a href="http://www.blogjava.net/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.blogjava.net/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.blogjava.net/beauty_beast/archive/2006/03/14/35202.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/35202.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2006/03/14/35202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/35202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/35202.html</trackback:ping><description><![CDATA[前段时间要求进行代码检查，集合jtest工具静态检查，做了一个检查标准。生成jtest检查配置文件，开发人员检查、修改还是比较方便的。故将检查标准列出。<BR>其实jtest帮助是比较详细的，基本每个检查标准都有详细的说明，我花了两天的时间将它详细看了一下，顺便汉化，以后重新定义标准也比较快，也算一个学习心得。<BR>下载 ：<A HREF="/Files/beauty_beast/code_checklist.rar">http://www.blogjava.net/Files/beauty_beast/code_checklist.rar</A><BR><BR><BR><BR><img src ="http://www.blogjava.net/beauty_beast/aggbug/35202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2006-03-14 11:30 <a href="http://www.blogjava.net/beauty_beast/archive/2006/03/14/35202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习设计模式之proxy模式</title><link>http://www.blogjava.net/beauty_beast/archive/2005/08/19/10535.html</link><dc:creator>柳随风</dc:creator><author>柳随风</author><pubDate>Fri, 19 Aug 2005 08:58:00 GMT</pubDate><guid>http://www.blogjava.net/beauty_beast/archive/2005/08/19/10535.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/10535.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2005/08/19/10535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/10535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/10535.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前言: 本文只是本人的学习总结，目的希望能和大家一起交流分享，顺便备忘，如有不正确的地方，欢迎指正。本文可能需要你对webwork框架有一定的了解。&nbsp;我们在开发中Proxy模式是经常用到的，代理主要用来对访问的资源进行权限控制以及监控的目的，如果我们在开发系统需要对访问的对象进行控制和监控的话，proxy模式是很有用途的。举些例子：我们开发一个应用系统时，用户请求任何页面...&nbsp;&nbsp;<a href='http://www.blogjava.net/beauty_beast/archive/2005/08/19/10535.html'>阅读全文</a><img src ="http://www.blogjava.net/beauty_beast/aggbug/10535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2005-08-19 16:58 <a href="http://www.blogjava.net/beauty_beast/archive/2005/08/19/10535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>