<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>ㅅㅏㅇ... spanthoma..</title>
	<link>http://spanthoma.egloos.com</link>
	<description>spanthoma</description>
	<language>ko</language>
	<pubDate>Fri, 17 Jul 2009 02:27:40 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>ㅅㅏㅇ... spanthoma..</title>
		<url>http://pds.egloos.com/logo/1/200403/09/73/a0014673.gif</url>
		<link>http://spanthoma.egloos.com</link>
		<width>80</width>
		<height>82</height>
		<description>spanthoma</description>
	</image>
  	<item>
		<title><![CDATA[ Thread dump ]]> </title>
		<link>http://spanthoma.egloos.com/1929302</link>
		<guid>http://spanthoma.egloos.com/1929302</guid>
		<description>
			<![CDATA[ 
  <br>출처 : <a href="http://blog.naver.com/PostView.nhn?blogId=sara7499&amp;logNo=120016026810&amp;widgetTypeCall=true">http://blog.naver.com/PostView.nhn?blogId=sara7499&amp;logNo=120016026810&amp;widgetTypeCall=true</a><br><br><br>Thread Dump란 Java Application이 작동하는 순간의 X-Ray 사진, snapshot을 의미한다.<br>즉 이 Thread dump를 연속해서 수번을 추출한다면, 그 당시 Application이 어떻게 동작하고 진행되고 <br>있는가를 살펴볼 수 있다.<br><br>Thread Dump를 추출하기 위해서는<br>&nbsp;&nbsp; - Unx에서는 kill -3 pid<br>&nbsp;&nbsp; - Window 계열에서는 Ctrl + break<br>를 누르면 stdout으로 thread dump가 추출된다.<br><br><br>나중을 위해.. 내 블로그에.. 블로깅...			 ]]> 
		</description>
		<category>java</category>

		<comments>http://spanthoma.egloos.com/1929302#comments</comments>
		<pubDate>Fri, 17 Jul 2009 02:27:40 GMT</pubDate>
		<dc:creator>역시나야</dc:creator>
	</item>
	<item>
		<title><![CDATA[ spring 2.5 + tiles 2.1 연동 ]]> </title>
		<link>http://spanthoma.egloos.com/1902663</link>
		<guid>http://spanthoma.egloos.com/1902663</guid>
		<description>
			<![CDATA[ 
  <br>&nbsp;spring 2.5.x + tiles 2.1.x 연동시 발생오류 사항<br><br>&nbsp;Caused by: java.lang.UnsupportedOperationException: <br>&nbsp;&nbsp;&nbsp; Class org.apache.tiles.web.util.ServletContextAdapter not&nbsp; recognized a TilesApplicationContext<br><br>&nbsp;구글링을 통해서 원인을 찾아보니 tiles2.1 과 spring 2.5는 아직 연동이 안되는 상태이기 때문에<br>&nbsp;다른 방법을 써야 한다고 나와 있다.<br>&nbsp;바로 여기에 ---&gt; <a href="http://richardbarabe.wordpress.com/2009/02/23/apache-tiles-2-integration-with-spring-mvc/">http://richardbarabe.wordpress.com/2009/02/23/apache-tiles-2-integration-with-spring-mvc/</a><br><br>&nbsp;그러나 추가적인 방법은 언제나 임시적일수 있기 때문에<br>&nbsp;걍 tiles 라이브러리를 2.0 버전을 사용하기로 했음,<br><br>&nbsp;tiles 2.1에서는 jar 파일이 5가지 항목이다.<br>&nbsp;2.0에서는 없던 tiles-servlet.jar 파일도 보인다.<br>&nbsp;2.1 에서 tiles-servlet.jar 파일은 반드시 필요하다. 초기 서블릿이 로딩될때 저놈을 이용하니까...<br>&nbsp;tiles만 써야 한다면 모를까.. spring과 연동하기 위해서는 아직 인가 싶다..<br><br>&nbsp;이미 버그리포팅이 되어 있는 상태라니까.. spring 3.0을 기다려야.. 겠지..??			 ]]> 
		</description>
		<category>미분류</category>

		<comments>http://spanthoma.egloos.com/1902663#comments</comments>
		<pubDate>Wed, 06 May 2009 08:41:53 GMT</pubDate>
		<dc:creator>역시나야</dc:creator>
	</item>
	<item>
		<title><![CDATA[ JDK Dynamic Proxy와 CGLIB Proxy에 대한 이해 ]]> </title>
		<link>http://spanthoma.egloos.com/1888748</link>
		<guid>http://spanthoma.egloos.com/1888748</guid>
		<description>
			<![CDATA[ 
  <div><br />
</div><div> Spring에서 프록시를 이용한 AOP 구현에 관한 부분을 보던중에</div><div> 2가지 타입이 있어서 잠까 확인하고자 구글링을 해 보았다.</div><div> 대다수의 개발자들이 알고 있을꺼 같지만.. 나는 아직 몰라서.. 걍 퍼왔다.</div><div><br />
</div><div> 출처 : 자바지기 Spring 강좌 (<a href="http://www.javajigi.net/pages/viewpage.action?pageId=1065">http://www.javajigi.net/pages/viewpage.action?pageId=1065)</a></div><div><br />
</div><div><br />
</div><div> <span class="Apple-style-span" style="color: rgb(0, 51, 102); font-family: Helvetica; font-size: 21px; font-weight: bold; line-height: normal; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">Proxy에 대하여..</span></div><span class="Apple-style-span" style="font-family: Helvetica; font-size: 13px; line-height: 17px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Spring AOP는 두가지 Type의 Proxy를 지원하고 있다. 그 첫번째는 JDK의 Proxy 기능을 이용하는 것이고, 두번째 방법은 CGLIB의 Enhancer 클래스를 이용하는 것이다. 이 두가지 Proxy의 차이점을 이해하고 사용하는 Spring AOP를 제대로 사용하는 것이 될 것이다.</p><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Proxy의 핵심적인 기능은 원하는 메써드가 호출(Invocation)될 때 이 메써드를 가로채어 우리가 원하는 특정 기능들을 추가할 수 있도록 지원하는 것이다.</p><h2 style="margin-right: 0px; margin-bottom: 4px; margin-left: 0px; font-weight: bold; line-height: normal; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 16pt; margin-top: 24px; color: rgb(0, 51, 102); border-bottom-color: rgb(60, 120, 181); "><a name="JDKDynamicProxy%EC%99%80CGLIBProxy%EC%97%90%EB%8C%80%ED%95%9C%EC%9D%B4%ED%95%B4-JDKProxy"></a>JDK Proxy</h2><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">JDK Proxy는 인터페이스에 대한 Proxy만을 지원하며, 클래스에 대한 Proxy를 지원할 수 없다는 것이 큰 단점이다. 자바에서 인터페이스를 사용하는 것이 좋은 설계임에는 틀림없지만 모든 애플리케이션에서 인터페이스를 사용한다는 제약을 두는 것은 좋지 않다. 특히 국내와 같이 인터페이스를 많이 사용하지 않고, 이에 대한 인식이 없는 상태에서 Proxy 기능을 사용하기 위하여 인터페이스를 사용해야 한다고 강요할 경우 개발자들에게 상당한 반발을 가져올 수 밖에 없다.</p><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">또한 이미 구현되어 있는 애플리케이션에 Proxy기능을 추가할 때 JDK Proxy를 사용한다면 클래스로 구현되어 있는 소스에서 인터페이스를 추출한 다음 Proxy를 적용할 수 밖에 없다는 단점이 있다. 이와 같이 클래스에 Proxy를 적용하고자 할 경우에는 CGLIB Proxy만을 사용해야 한다.</p><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">JDK Proxy가 가지는 또 하나의 단점은 Target 클래스에 Proxy를 적용할 때 PointCut에 정보에 따라 Advice되는 메써드와 그렇지 않은 메써드가 존재한다. 그러나 JDK Proxy를 사용할 경우 Target 클래스에 대한 모든 메써드 호출이 일단 JVM에 Intercept한 다음 Advice의 invoke 메써드를 호출하게 된다. 그 후에 이 메써드가 Advice되는 메써드인지 그렇지 않은지를 판단하게 된다. 이 과정에서 JVM에 의하여 Intercept한 다음 invoke 메써드를 호출할 때 JDK의 reflection을 이용하여 호출하게 되는것이다. 이는 Proxy를 사용할 때 실행속도를 상당히 저하시키는 원인이 된다.</p><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Spring 프레임워크에서 JDK Proxy를 사용하고자 한다면 ProxyFactory의 setProxyInterfaces() 메써드에 사용할 인터페이스를 전달하면 JDK Proxy를 이용할 수 있다. 그러나 이 메써드를 통하여 인터페이스를 전달하지 않을 경우 기본적인 Proxy는 CGLIB Proxy가 된다.</p><h2 style="margin-right: 0px; margin-bottom: 4px; margin-left: 0px; font-weight: bold; line-height: normal; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 16pt; margin-top: 24px; color: rgb(0, 51, 102); border-bottom-color: rgb(60, 120, 181); "><a name="JDKDynamicProxy%EC%99%80CGLIBProxy%EC%97%90%EB%8C%80%ED%95%9C%EC%9D%B4%ED%95%B4-CGLIBProxy"></a>CGLIB Proxy</h2><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">CGLIB Proxy 또한 JDK Proxy처럼 Runtime시에 Target 메써드가 호출될 때 해당 메써드의 Advice적용 여부를 결정하게 된다. 그러나 CGLIB는 메써드가 처음 호출 되었을때 동적으로 bytecode를 생성하여 이후 호출에서는 재사용하는 과정을 거치게 된다. 이 같은 과정을 통하여 두번째 호출이후부터는 실행속도의 향상을 가져올 수 있는 방법을 사용하고 있다.</p><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">또한 CGLIB Proxy는 클래스에 대한 Proxy가 가능하다.</p><h2 style="margin-right: 0px; margin-bottom: 4px; margin-left: 0px; font-weight: bold; line-height: normal; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 16pt; margin-top: 24px; color: rgb(0, 51, 102); border-bottom-color: rgb(60, 120, 181); "><a name="JDKDynamicProxy%EC%99%80CGLIBProxy%EC%97%90%EB%8C%80%ED%95%9C%EC%9D%B4%ED%95%B4-JDKProxy%EC%99%80CGLIBProxy%EC%9D%98%EC%84%B1%EB%8A%A5%EB%B9%84%EA%B5%90"></a>JDK Proxy와 CGLIB Proxy의 성능비교</h2><div class="code panel" style="color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; overflow-x: auto; overflow-y: auto; background-color: rgb(255, 255, 255); border-top-color: rgb(60, 120, 181); border-right-color: rgb(60, 120, 181); border-bottom-color: rgb(60, 120, 181); border-left-color: rgb(60, 120, 181); background-position: initial initial; "><div class="codeHeader panelHeader" style="padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; line-height: 2; text-align: center; border-bottom-width: 1px; border-bottom-style: solid; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(240, 240, 240); border-bottom-color: rgb(60, 120, 181); background-position: initial initial; "><b>ISimpleBean.java</b></div><div class="codeContent panelContent" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; font-size: 0.95em; text-align: left; background-position: initial initial; "><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">public</span> <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">interface</span> ISimpleBean {    <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">   public</span> void advised();    <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">   public</span> void unadvised();    </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">}</pre></div></div><div class="code panel" style="color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; overflow-x: auto; overflow-y: auto; background-color: rgb(255, 255, 255); border-top-color: rgb(60, 120, 181); border-right-color: rgb(60, 120, 181); border-bottom-color: rgb(60, 120, 181); border-left-color: rgb(60, 120, 181); background-position: initial initial; "><div class="codeHeader panelHeader" style="padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; line-height: 2; text-align: center; border-bottom-width: 1px; border-bottom-style: solid; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(240, 240, 240); border-bottom-color: rgb(60, 120, 181); background-position: initial initial; "><b>SimpleBean.java</b></div><div class="codeContent panelContent" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; font-size: 0.95em; text-align: left; background-position: initial initial; "><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">public</span> class SimpleBean <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">implements</span> ISimpleBean {    <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">  private</span> <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">long</span> dummy = 0;</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">  <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">public</span> void advised() {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        dummy = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis(); </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">  }</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">  <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">public</span> void unadvised() {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        dummy = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();    </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">  }</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">}</pre></div></div><div class="code panel" style="color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; overflow-x: auto; overflow-y: auto; background-color: rgb(255, 255, 255); border-top-color: rgb(60, 120, 181); border-right-color: rgb(60, 120, 181); border-bottom-color: rgb(60, 120, 181); border-left-color: rgb(60, 120, 181); background-position: initial initial; "><div class="codeHeader panelHeader" style="padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; line-height: 2; text-align: center; border-bottom-width: 1px; border-bottom-style: solid; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(240, 240, 240); border-bottom-color: rgb(60, 120, 181); background-position: initial initial; "><b>NoOpBeforeAdvice.java</b></div><div class="codeContent panelContent" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; font-size: 0.95em; text-align: left; background-position: initial initial; "><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">import</span> java.lang.reflect.Method;<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">import</span> org.springframework.aop.MethodBeforeAdvice;<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">public</span> class NoOpBeforeAdvice <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">implements</span> MethodBeforeAdvice {    <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">  public</span> void before(Method method, <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">Object</span>[] args, <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">Object</span> target) <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">throws</span> Throwable {  </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">      <span class="code-comment" style="color: rgb(128, 128, 128); background-color: inherit; ">// no-op</span>    </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">  }</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">}</pre></div></div><div class="code panel" style="color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; overflow-x: auto; overflow-y: auto; background-color: rgb(255, 255, 255); border-top-color: rgb(60, 120, 181); border-right-color: rgb(60, 120, 181); border-bottom-color: rgb(60, 120, 181); border-left-color: rgb(60, 120, 181); background-position: initial initial; "><div class="codeHeader panelHeader" style="padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; line-height: 2; text-align: center; border-bottom-width: 1px; border-bottom-style: solid; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(240, 240, 240); border-bottom-color: rgb(60, 120, 181); background-position: initial initial; "><b>TestPointcut.java</b></div><div class="codeContent panelContent" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; font-size: 0.95em; text-align: left; background-position: initial initial; "><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">import</span> java.lang.reflect.Method;<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">import</span> org.springframework.aop.support.StaticMethodMatcherPointcut;<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">public</span> class TestPointcut <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">extends</span> StaticMethodMatcherPointcut {    <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">  public</span> <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">boolean</span> matches(Method method, <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">Class</span> cls) {        <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">   return</span> (<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"advised"</span>.equals(method.getName()));    </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">  }</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">}</pre></div></div><div class="code panel" style="color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; overflow-x: auto; overflow-y: auto; background-color: rgb(255, 255, 255); border-top-color: rgb(60, 120, 181); border-right-color: rgb(60, 120, 181); border-bottom-color: rgb(60, 120, 181); border-left-color: rgb(60, 120, 181); background-position: initial initial; "><div class="codeHeader panelHeader" style="padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; line-height: 2; text-align: center; border-bottom-width: 1px; border-bottom-style: solid; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(240, 240, 240); border-bottom-color: rgb(60, 120, 181); background-position: initial initial; "><b>ProxyPerfTest.java</b></div><div class="codeContent panelContent" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; font-size: 0.95em; text-align: left; background-position: initial initial; "><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">import</span> org.springframework.aop.Advisor;<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">import</span> org.springframework.aop.framework.Advised;<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">import</span> org.springframework.aop.framework.ProxyFactory;<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">import</span> org.springframework.aop.support.DefaultPointcutAdvisor;<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">public</span> class ProxyPerfTest {    <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">   public</span> <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">static</span> void main(<span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">String</span>[] args) {        </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">       ISimpleBean target = <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">new</span> SimpleBean();        </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">       Advisor advisor = <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">new</span> DefaultPointcutAdvisor(<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">new</span> TestPointcut()</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">                                                        , <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">new</span> NoOpBeforeAdvice());</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        runCglibTests(advisor, target);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        runCglibFrozenTests(advisor, target);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        runJdkTests(advisor, target);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">   }</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">   <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">private</span> <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">static</span> void runCglibTests(Advisor advisor, ISimpleBean target) {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        ProxyFactory pf = <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">new</span> ProxyFactory();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        pf.setTarget(target);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        pf.addAdvisor(advisor);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        ISimpleBean proxy = (ISimpleBean)pf.getProxy();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Running CGLIB (Standard) Tests"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        test(proxy);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">   }   <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">   private</span> <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">static</span> void runCglibFrozenTests(Advisor advisor, ISimpleBean target) {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        ProxyFactory pf = <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">new</span> ProxyFactory();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        pf.setTarget(target);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        pf.addAdvisor(advisor);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        pf.setFrozen(<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">true</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        ISimpleBean proxy = (ISimpleBean)pf.getProxy();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Running CGLIB (Frozen) Tests"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        test(proxy);    </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">   }        <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; "> </span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">   private</span> <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">static</span> void runJdkTests(Advisor advisor, ISimpleBean target) {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        ProxyFactory pf = <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">new</span> ProxyFactory();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        pf.setTarget(target);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        pf.addAdvisor(advisor);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        pf.setInterfaces(<span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">new</span> <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">Class</span>[]{ISimpleBean.class});</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        ISimpleBean proxy = (ISimpleBean)pf.getProxy();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Running JDK Tests"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        test(proxy);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">   }</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">   </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">   <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">private</span> <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">static</span> void test(ISimpleBean bean) {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">long</span> before = 0;</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">long</span> after = 0;                <span class="code-comment" style="color: rgb(128, 128, 128); background-color: inherit; "></span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><span class="code-comment" style="color: rgb(128, 128, 128); background-color: inherit; ">        // test advised method</span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Testing Advised Method"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        before = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">for</span>(<span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">int</span> x = 0; x &lt; 500000; x++) {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">            bean.advised();        </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        }</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        after = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();;</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Took "</span> + (after - before) + <span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">" ms"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-comment" style="color: rgb(128, 128, 128); background-color: inherit; ">// testing unadvised method</span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Testing Unadvised Method"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        before = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">for</span>(<span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">int</span> x = 0; x &lt; 500000; x++) {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">            bean.unadvised();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        }        </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        after = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();;</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Took "</span> + (after - before) + <span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">" ms"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><br />
</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-comment" style="color: rgb(128, 128, 128); background-color: inherit; ">// testing equals() method</span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Testing equals() Method"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        before = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">for</span>(<span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">int</span> x = 0; x &lt; 500000; x++) {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">            bean.equals(bean);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        }</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        after = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();;</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Took "</span> + (after - before) + <span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">" ms"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><br />
</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-comment" style="color: rgb(128, 128, 128); background-color: inherit; ">// testing hashCode() method</span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Testing hashCode() Method"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        before = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">for</span>(<span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">int</span> x = 0; x &lt; 500000; x++) {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">            bean.hashCode();        </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        }</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        after = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();;</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Took "</span> + (after - before) + <span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">" ms"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; "><br />
</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">       <span class="code-comment" style="color: rgb(128, 128, 128); background-color: inherit; ">// testing method on Advised</span></pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        Advised advised = (Advised)bean;</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Testing Advised.getProxyTargetClass() Method"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        before = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-keyword" style="color: rgb(0, 0, 145); background-color: inherit; ">for</span>(<span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">int</span> x = 0; x &lt; 500000; x++) {</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">            advised.getProxyTargetClass();</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        }</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        after = <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.currentTimeMillis();;</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">"Took "</span> + (after - before) + <span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">" ms"</span>);</pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">        <span class="code-object" style="color: rgb(145, 0, 145); background-color: inherit; ">System</span>.out.println(<span class="code-quote" style="color: rgb(0, 145, 0); background-color: inherit; ">">>>\n"</span>);    </pre><pre class="code-java" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">    }}</pre></div></div><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">output : <br />
Running CGLIB (Standard) Tests<br />
Testing Advised Method<br />
Took 310 ms<br />
Testing Unadvised Method<br />
Took 60 ms<br />
Testing equals() Method<br />
Took 30 ms<br />
Testing hashCode() Method<br />
Took 20 ms<br />
Testing Advised.getProxyTargetClass() Method<br />
Took 20 ms<br />
>>></p><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Running CGLIB (Frozen) Tests<br />
Testing Advised Method<br />
Took 191 ms<br />
Testing Unadvised Method<br />
Took 60 ms<br />
Testing equals() Method<br />
Took 30 ms<br />
Testing hashCode() Method<br />
Took 20 ms<br />
Testing Advised.getProxyTargetClass() Method<br />
Took 10 ms<br />
>>></p><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Running JDK Tests<br />
Testing Advised Method<br />
Took 410 ms<br />
Testing Unadvised Method<br />
Took 271 ms<br />
Testing equals() Method<br />
Took 260 ms<br />
Testing hashCode() Method<br />
Took 70 ms<br />
Testing Advised.getProxyTargetClass() Method<br />
Took 131 ms<br />
>>></p><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">위 결과를 보면 Advised 메써드의 경우 JDK보다 CGLIB(Standard) Proxy를 사용할 경우 25%이상 더 빠른 것을 확인할 수 있다. Advised 메써드의 경우에는 25%정도이지만 다른 UnAdvised되는 메써드를 확인해 보면 그 차이는 상당히 크다는 것을 확인할 수 있다. CGLIB Proxy에 비해 JDK Proxy가 4배 이상 느린 것을 확인할 수 있다. 우리들이 모든 Object에서 가지는 equals()와 hashCode()에서도 비슷한 결과가 나타난 것을 확인할 수 있다.</p><p style="color: rgb(0, 0, 0); font-weight: normal; font-size: 10pt; line-height: 13pt; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">이 같은 결과가 나타나는 가장 큰 이유는 JDK Proxy가 UnAdvised 메써드임에도 불구하고 매번 자바의 reflection을 이용하여 Advice의 invoke 메써드를 호출하기 때문이다.</p></span>			 ]]> 
		</description>
		<category>spring</category>

		<comments>http://spanthoma.egloos.com/1888748#comments</comments>
		<pubDate>Tue, 31 Mar 2009 03:14:51 GMT</pubDate>
		<dc:creator>역시나야</dc:creator>
	</item>
	<item>
		<title><![CDATA[ spring jdbc 연동 ]]> </title>
		<link>http://spanthoma.egloos.com/1886984</link>
		<guid>http://spanthoma.egloos.com/1886984</guid>
		<description>
			<![CDATA[ 
  <div><br />
</div><div> spring에서 지원하는 JDBC는 기존의 Connection, PreparedStatement, ResultSet 등을 처리하는 </div><div> 기능 뿐만 아니라  개발자들이 결과처리를 편하게 하기 위해 직접 제작했던 부분들을 지원함으로써</div><div> 꽤나.. 편한해 진걸 느낄수 있다.</div><div><br />
</div><div> 다음은 spring에서 지원하는 JdbcTemplate와 JdbcDaoSupport를 간략하게 비교한 부분이다.</div><div> 물론 고수분들은 더 간단한 코드를 원하거나 이미 그분들이 만들어 놓은 코드가 더 좋을것이라고 말한다.</div><div> 당연하다!.. 이제 3시간 삽질하면서 작성한 코드니까.. ㅠㅠ</div><div> 하지만 이걸 모르고 고수분들의 코드만 가져다 쓸순 없지 않은가..??</div><div><br />
</div><div> 간략하게 사용자를 등록하는 insertUser() 와 getUserList() 함수를 구성함으로써 확 줄어진 코드를 볼수 있을 것이다.</div><div> 아래의 코드는 어느 spring 관련 책에서도 아주 쉽~게 볼수 있으므로 설명은 생략한다.</div><div><br />
</div><div> 1. JdbcTemplate 클래스를 이용한 연동</div><div>   </div><div>   <span class="Apple-tab-span" style="white-space:pre">	</span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">private JdbcTemplate jdbcTemplate;</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">	</span></b></span></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">	</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">	<span class="Apple-tab-span" style="white-space:pre">	</span></span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">this.jdbcTemplate = jdbcTemplate;</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">	</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">}</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">	</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">public int insertUser(Object obj) {</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">		</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">JoinCommand cmd = (JoinCommand)obj;</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">		</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">return jdbcTemplate.update(INSERT_INTO_USER, </span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">				</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">new Object[] {</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">					</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">cmd.getId(), </span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">					</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">cmd.getName(), </span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">					</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">cmd.getPasswd(), </span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">					</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">cmd.getAddress(), </span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">					</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">cmd.getMobile() </span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">				</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">}</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">		</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">);</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">		</span></b></span></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">	</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">}</span></b></div><div><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);"><br />
</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">	</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">public List&lt;Object> getUserList() {</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">		</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">List&lt;Object> list = jdbcTemplate.query("select * from users", </span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">				</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">new RowMapper() {</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">					</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">public Object mapRow(ResultSet rs, int rowNum) throws SQLException {</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">						</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">JoinCommand cmd = new JoinCommand();</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">						</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">cmd.setId(rs.getString("id"));</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">						</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">cmd.setName(rs.getString("name"));</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">						</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">cmd.setAddress(rs.getString("address"));</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">						</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">cmd.setMobile(rs.getString("mobile"));</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">						</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">return cmd;</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">					</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">}</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">		</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">});</span></b><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">		</span></b></span></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">		</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">return list;</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">	</span></b></span><b><span class="Apple-style-span" style="background-color: rgb(255, 255, 255);">}</span></b></div><div><b><br />
</b></div><div><b><br />
</b></div><div><b><br />
</b></div><div><b>  </b>2. JdbcDaoSupport<b> <span class="Apple-style-span" style="font-weight: normal; ">클래스를 이용한 연동</span></b></div><div><br />
</div><div><div><span class="Apple-tab-span" style="white-space:pre">	</span><b>public Object getUserList() {</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>		</b></span><b>Object [] param = null;</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>		</b></span><b>return getJdbcTemplate().queryForList(SELECT_USERS, param);</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>	</b></span><b>}</b></div><div><b><br />
</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>	</b></span><b>public int insertUser(Object obj) {</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>		</b></span><b>JoinCommand cmd = (JoinCommand)obj;</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>		</b></span><b>Object [] param = new Object[] {</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>			</b></span><b>cmd.getId(),</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>			</b></span><b>cmd.getName(),</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>			</b></span><b>cmd.getPasswd(),</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>			</b></span><b>cmd.getAddress(),</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>			</b></span><b>cmd.getMobile()</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>		</b></span><b>};</b><span class="Apple-tab-span" style="white-space:pre"><b>		</b></span></div><div><span class="Apple-tab-span" style="white-space:pre"><b>		</b></span><b>return getJdbcTemplate().update(INSERT_INTO_USER, param);</b></div><div><span class="Apple-tab-span" style="white-space:pre"><b>	</b></span><b>}</b></div></div>			 ]]> 
		</description>
		<category>spring</category>

		<comments>http://spanthoma.egloos.com/1886984#comments</comments>
		<pubDate>Thu, 26 Mar 2009 08:09:16 GMT</pubDate>
		<dc:creator>역시나야</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Spring Controllers.. ]]> </title>
		<link>http://spanthoma.egloos.com/1886484</link>
		<guid>http://spanthoma.egloos.com/1886484</guid>
		<description>
			<![CDATA[ 
  <br>&nbsp;1. &nbsp;단순 처리&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; - 별도의 기능을 제공하지 않는 컨트롤러. 요청 파라미터 처리등의 작업을 직접 구현해야 한다.<br>&nbsp;&nbsp;&nbsp;&nbsp; - Controller / AbstractController<br>&nbsp; 2.&nbsp;파라미터 매핑<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 요청파라미터를 객체에 저장해 주며, 파라미터 값 검증 기능을 제공한다.<br>&nbsp;&nbsp;&nbsp;&nbsp; - AbstractorCommandController<br>&nbsp; 3. 입력 폼 처리<br>&nbsp;&nbsp;&nbsp;&nbsp; - 폼을 출력하고 폼에 입력한 데이터를 처리할 때 사용된다,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- SimpleFormController<br>&nbsp;&nbsp;4.&nbsp;다중 페이지 입력 폼 처리<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 여러 페이지에 걸쳐 데이터를 입력하는 경우, 입력 폼의 프름을 제어하고 입력한 데이터를 처리한다.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- AbstractWizardFormController<br>&nbsp; 5.&nbsp;정적 뷰 매핑<br>&nbsp;&nbsp;&nbsp;&nbsp; - 컨트롤러에서 어떤 기능도 수행하지 않고, 단순히 클라이언트의 요청을 뷰로 전달한다.<br>&nbsp;&nbsp;&nbsp;&nbsp; - ParameterizableViweController&nbsp; / UrlFilenameViewController<br>&nbsp;&nbsp;6. 다중 액션<br>&nbsp;&nbsp;&nbsp;&nbsp; - 연관되거나 비슷한&nbsp;로직을&nbsp;수행하는 다순의 기능을 하나의 컨트롤러에서 구현할 때&nbsp;사용된다.<br>&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;MultiActionController<br><br>&nbsp; 			 ]]> 
		</description>
		<category>spring</category>

		<comments>http://spanthoma.egloos.com/1886484#comments</comments>
		<pubDate>Wed, 25 Mar 2009 07:07:40 GMT</pubDate>
		<dc:creator>역시나야</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/sc ]]> </title>
		<link>http://spanthoma.egloos.com/1882927</link>
		<guid>http://spanthoma.egloos.com/1882927</guid>
		<description>
			<![CDATA[ 
  <br>&nbsp;이클립스에서 aop 테스트 중 다음과 같은 에러 발생<br><br>&nbsp;Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/aop<br><br>&nbsp;원인은 aop 관련 jar 파일을 프로젝트 lib에 추가한다.<br><br>&nbsp;1. spring-aop.jar<br>&nbsp;2. aopalliance.jar<br><br>&nbsp;구글에서는 이상한 소리들만.. <br>&nbsp;에잉..<br>			 ]]> 
		</description>
		<category>spring</category>

		<comments>http://spanthoma.egloos.com/1882927#comments</comments>
		<pubDate>Mon, 16 Mar 2009 07:05:56 GMT</pubDate>
		<dc:creator>역시나야</dc:creator>
	</item>
	<item>
		<title><![CDATA[ spring framework 시작. ]]> </title>
		<link>http://spanthoma.egloos.com/1878693</link>
		<guid>http://spanthoma.egloos.com/1878693</guid>
		<description>
			<![CDATA[ 
  <br>&nbsp;좀 늦은감이 있게.. 그리고 급하게 spring framework 에 대해서&nbsp;<br>&nbsp;배워보려고 한다.<br><br>&nbsp;spring 관련된 책을 사고 스프링이 어떠한 프레임워크인지를 우선 살펴보고<br>&nbsp;스프링의 장/단점에 대해서도 생각해 보려고 한다.<br>&nbsp;<br>&nbsp;이미 온라인 상에 스프링관련된 많은 자료들이 있으나,<br>&nbsp;정작 본인에게 맞는 자료를 찾기는 쉽지 않은 일이라고 생각한다.<br><br>&nbsp;본인이 작성한 부분역시 본인에게 맞게 정리되어진 문서이기 때문에<br>&nbsp;참고가 될만한 사람이 누구라고 딱히 정하기도 어렵다.<br><br>&nbsp;아무쪼록 스프링 프레임워크에 대한 검색을 통해서 이 글을 읽는 사람들도<br>&nbsp;각자에 맞게 스프링을 정의하고 해석해 보는 방법이&nbsp;<br>&nbsp;최선일 것이라고 생각한다.<br><br>&nbsp;서론은 여기까지..			 ]]> 
		</description>
		<category>spring</category>

		<comments>http://spanthoma.egloos.com/1878693#comments</comments>
		<pubDate>Thu, 05 Mar 2009 08:08:38 GMT</pubDate>
		<dc:creator>역시나야</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 노트북 centOS 에서 무선랜 잡기 ]]> </title>
		<link>http://spanthoma.egloos.com/1865991</link>
		<guid>http://spanthoma.egloos.com/1865991</guid>
		<description>
			<![CDATA[ 
  redhat 계열을 쓰는 리눅스를 설치 후에 바로 ipw2200 모듈을 쓰는 무선랜카드가 안 되는 경우가 있습니다<br><br>원인은 리눅스를 설치 할때 ipw2200 모듈이 필요하는 firmware를 설치 해 주지 않기 때문입니다<br><br>dmesg으로 커널 메시지를 보게 되면 <br><br>ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.2.0kmprq<br>ipw2200: Copyright(c) 2003-2006 Intel Corporation<br>PCI: Enabling device 0000:06:05.0 (0000 -&gt; 0002)<br>ACPI: PCI Interrupt 0000:06:05.0[A] -&gt; GSI 16 (level, low) -&gt; IRQ 169<br>ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection<br>ipw2200: ipw2200-bss.fw request_firmware failed: Reason -2<br><span style="COLOR: #ff0000">ipw2200: Unable to load firmware: -2</span><br>ipw2200: failed to register network device<br>ACPI: PCI interrupt for device 0000:06:05.0 disabled<br>ipw2200: probe of 0000:06:05.0 failed with error -5<br><br>firmware가 없다고 에러가 뜨게 됩니다<br><br><a href="http://ipw2200.sourceforge.net/firmware.php"><span style="COLOR: #2388c8">http://ipw2200.sourceforge.net/firmware.php</span></a><br><br>이 곳에 들어 가서 firmware을 다운 받아 압축을 푼 다음에 생성되는 .fw 파일들을 모두 <span style="COLOR: #ff0000">/lib/firmware/</span> 으로 넣어주게 되면 제대로 무선랜카드가 인식이 됩니다<br><br>그리고 dmesg를 치면 아래와 같이 인식 되는 것을 알 수 있습니다<br><br>ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.2.0kmprq<br>ipw2200: Copyright(c) 2003-2006 Intel Corporation<br>PCI: Enabling device 0000:06:05.0 (0000 -&gt; 0002)<br>ACPI: PCI Interrupt 0000:06:05.0[A] -&gt; GSI 16 (level, low) -&gt; IRQ 169<br>ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection<br>ipw2200: Detected geography ZZR (14 802.11bg channels, 0 802.11a channels)<br><br>또한 iwconfig을 치면 인식 된 무선랜카드를 볼수 있습니다<br><br>eth4 &nbsp; &nbsp;&nbsp; unassociated&nbsp; ESSID:off/any<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Mode:Managed&nbsp; Channel=0&nbsp; Access Point: Not-Associated<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bit Rate:0 kb/s &nbsp; Tx-Power=20 dBm &nbsp; Sensitivity=8/0<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Retry limit:7 &nbsp; RTS thr:off &nbsp; Fragment thr:off<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Encryption key:off<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Power Management:off<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Link Quality:0&nbsp; Signal level:0&nbsp; Noise level:0<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Rx invalid nwid:0&nbsp; Rx invalid crypt:0&nbsp; Rx invalid frag:0<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Tx excessive retries:0&nbsp; Invalid misc:0 &nbsp; Missed beacon:0<br><br>출처 : 지풍 (<a href="http://jiphung.com/292">http://jiphung.com/292</a>)<br/><br/>tag : <a href="/tag/노트북" rel="tag">노트북</a>,&nbsp;<a href="/tag/무선랜" rel="tag">무선랜</a>,&nbsp;<a href="/tag/centOS" rel="tag">centOS</a>			 ]]> 
		</description>
		<category>on the Linux</category>
		<category>노트북</category>
		<category>무선랜</category>
		<category>centOS</category>

		<comments>http://spanthoma.egloos.com/1865991#comments</comments>
		<pubDate>Fri, 30 Jan 2009 23:05:11 GMT</pubDate>
		<dc:creator>역시나야</dc:creator>
	</item>
	<item>
		<title><![CDATA[ struts 초기화 과정 ]]> </title>
		<link>http://spanthoma.egloos.com/1808237</link>
		<guid>http://spanthoma.egloos.com/1808237</guid>
		<description>
			<![CDATA[ 
  <br />
struts 초기화 과정에 대해<br />
내부 method와 역할에 대해 간략하게 post 한다.<br />
<br />
<br />
<strong>** struts 초기화는 xml 설정 파일의 모든 정보를 ServletContext 에 객체화 하여 저장하는것이다.</strong><br />
<br />
* ActionServlet 의 init() 내부<br />
<br />
- iniInternal();  <br />
   - struts 내부에서 사용하는 메시지들을 초기화 한다.<br />
<br />
- initOther();   <br />
   - web.xml 에서 전달한 초기화 인자를 초기화 한다.   ex) debug, config 등등..<br />
<br />
-  initServlet(); <br />
   - web.xml 에서 설정한 servlet-mapping 정보를 초기화 한다.<br />
<br />
- initModuleConfig();<br />
   - web.xml 에서 전달된 struts 설정 파일을 applicationConfig 객체에 초기화 하는 과정<br />
<br />
- initModuleMessageResource();<br />
   - struts-config.xml 설정 파일에 메시지 리소스 정보를 가지는 파일이 있으면 초기화 한다. <br />
     메시지 리소스를 저장하는 파일은 .properties 확장자를 가지는 파일을 사용한다.<br />
<br />
- initModuleDataSource();<br />
    -  struts-config.xml 설정 파일에 DataSource 정보가 설정되어 있다면 초기화 한다. <br />
       DataSource 정보는 struts에서 DataBase의 Connection 객체를 얻을 수 있게 설정하는 것이다.<br />
<br />
- initModulePlugIns();<br />
   - struts-config.xml 설정 파일에 플러그인 정보가 설정되어 있다면 초기화 한다.<br />
    struts 외에 다른 프레임워크를 사용하는 것이 가능하게 하기 위하여 플러그인 기능을 제공한다.<br />
<br />
- 추가 모듈 설정<br />
   - 앞의 과정은 default 설정과정을 초기화 하는 과정이고, 추가 모듈이 존재한다면 모듈을 추가한다.<br />
       			 ]]> 
		</description>
		<category>struts</category>

		<comments>http://spanthoma.egloos.com/1808237#comments</comments>
		<pubDate>Tue, 09 Sep 2008 09:08:09 GMT</pubDate>
		<dc:creator>역시나야</dc:creator>
	</item>
	<item>
		<title><![CDATA[ vb 스크립트로 엑셀에 메일주소 하이퍼 링크 뽑아내기 ]]> </title>
		<link>http://spanthoma.egloos.com/1802729</link>
		<guid>http://spanthoma.egloos.com/1802729</guid>
		<description>
			<![CDATA[ 
  <p><br>엑셀에서 이름에 붙어 있는 이메일 하이퍼 링크를 <br>이름 바로 옆 셀로 이동하는 스크립트다.<br>vb 스크립트는 첨인데.. <br>고생좀 했다.<br>암것도 모르는데 디버깅까정 해봤다.. ㅋㅋㅋㅋㅋ<br><br>기본 구조는 지식인의 도움을 받았지만. 완벽한 소스가 아니어서<br>부득이 수정을 가할 수 밖에 없었기에.. ㅠㅠ.<br>어렵다!<br><br>-------------------------------------------------------------<br><br>Sub Macro1()</p><p>Dim rngCell As Range<br>Dim rng&nbsp;&nbsp;&nbsp;&nbsp; As Range<br>Dim txtH&nbsp;&nbsp;&nbsp; As Variant<br>Dim index&nbsp;&nbsp; As Integer</p><p>&nbsp;&nbsp;&nbsp; ' 오류 발생시 다음 문으로<br>&nbsp;&nbsp;&nbsp; On Error Resume Next<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; ' 검색할 범위 설정<br>&nbsp;&nbsp;&nbsp; Set rngCell = Range(Cells(1, 1), ActiveCell.SpecialCells(xlLastCell))<br>&nbsp;&nbsp;&nbsp; index = 1<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; ' 검색할 범위를 반복<br>&nbsp;&nbsp;&nbsp; For Each rng In rngCell<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' 셀 하이퍼링크 주소를 변수에 저장(하이퍼링크가 없으면 다음 문으로 이동)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtH = rng.Hyperlinks(1).Address<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If rng.Column = 1 Then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cells(index, 2).Value = txtH<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index = index + 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Next rng<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>End Sub</p>			 ]]> 
		</description>
		<category>.net</category>

		<comments>http://spanthoma.egloos.com/1802729#comments</comments>
		<pubDate>Thu, 28 Aug 2008 01:04:03 GMT</pubDate>
		<dc:creator>역시나야</dc:creator>
	</item>
</channel>
</rss>
