<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Piotr Gabryanczyk's Blog &#187; annotations</title>
	<atom:link href="http://piotrga.wordpress.com/category/annotations/feed/" rel="self" type="application/rss+xml" />
	<link>http://piotrga.wordpress.com</link>
	<description>Java, Refactoring, AOP, Spring, DDD, TDD, etc.</description>
	<lastBuildDate>Mon, 29 Jun 2009 09:47:45 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='piotrga.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/d2a4bd750e12ba6846cb9ee2dea2ea8e?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Piotr Gabryanczyk's Blog &#187; annotations</title>
		<link>http://piotrga.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://piotrga.wordpress.com/osd.xml" title="Piotr Gabryanczyk&#8217;s Blog" />
		<item>
		<title>@Configurable without Spring in 10 minutes</title>
		<link>http://piotrga.wordpress.com/2006/12/01/configurable-without-spring-in-10-minutes/</link>
		<comments>http://piotrga.wordpress.com/2006/12/01/configurable-without-spring-in-10-minutes/#comments</comments>
		<pubDate>Fri, 01 Dec 2006 13:59:53 +0000</pubDate>
		<dc:creator>Piotr Gabryanczyk</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[aop]]></category>
		<category><![CDATA[aspectj]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://piotrga.wordpress.com/2006/12/01/configurable-without-spring-in-10-minutes/</guid>
		<description><![CDATA[Why I was asked recently to remove Spring from my project&#8230; I know, I know one step forward two steps back&#8230; I wasn&#8217;t happy at all. It was because Eclipse was crashing when two plugins had its own copy of spring library&#8230; Good excuse to remove Spring&#8230; Problem We are heavily using @Configurable and AspectJ [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=piotrga.wordpress.com&blog=595023&post=3&subd=piotrga&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><H2>Why</H2> <P>I was asked recently to remove Spring from my project&#8230; I know, I know one step forward two steps back&#8230; I wasn&#8217;t happy at all. It was because Eclipse was crashing when two plugins had its own copy of spring library&#8230; Good excuse to remove Spring&#8230;</P> <H2>Problem</H2> <P>We are heavily using @Configurable and AspectJ so we needed some mechanism which could replace spring aspect in injecting dependencies.</P> <H2>How</H2> <P>Just look below:</P> </p>
<pre><span style="color:#800000;"> 1 </span><span style="background-color:#ffffff;">@Aspect()
</span><span style="color:#800000;"> 2 </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">public</span><span style="background-color:#ffffff;"> </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">class</span><span style="background-color:#ffffff;"> ConfigurableHackAspect {
</span><span style="color:#800000;"> 3 </span><span style="background-color:#ffffff;">    </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">private</span><span style="background-color:#ffffff;"> </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">static</span><span style="background-color:#ffffff;"> Map&lt;String, Object&gt; beanMap = </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">new</span><span style="background-color:#ffffff;"> HashMap&lt;String, Object&gt;();
</span><span style="color:#800000;"> 4
 5 </span><span style="background-color:#ffffff;">    </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">public</span><span style="background-color:#ffffff;"> </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">static</span><span style="background-color:#ffffff;"> </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">void</span><span style="background-color:#ffffff;"> registerBean(String id, Object bean){
</span><span style="color:#800000;"> 6 </span><span style="background-color:#ffffff;">        </span><span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;">beanMap.</span><span style="background-color:#ffffff;">put(id, bean);
</span><span style="color:#800000;"> 7 </span><span style="background-color:#ffffff;">    }
</span><span style="color:#800000;"> 8
 9 </span><span style="background-color:#ffffff;">    @After(</span><span style="color:#008000;background-color:#ffffff;font-weight:bold;">"@within(com.xyz.common.ConfigurableHack) &amp;&amp; execution(*.new(..))"</span><span style="background-color:#ffffff;">)
</span><span style="color:#800000;">10 </span><span style="background-color:#ffffff;">    </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">public</span><span style="background-color:#ffffff;"> </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">void</span><span style="background-color:#ffffff;"> afterConstructor(JoinPoint jp){
</span><span style="color:#800000;">11 </span><span style="background-color:#ffffff;">        </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">for</span><span style="background-color:#ffffff;">(Field f : getAllFields(jp)){
</span><span style="color:#800000;">12 </span><span style="background-color:#ffffff;">            </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">if</span><span style="background-color:#ffffff;"> (f.isAnnotationPresent(InjectDependency.</span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">class</span><span style="background-color:#ffffff;">) &amp;&amp; </span><span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;">beanMap.</span><span style="background-color:#ffffff;">containsKey( f.getName())){
</span><span style="color:#800000;">13 </span><span style="background-color:#ffffff;">                </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">try</span><span style="background-color:#ffffff;"> {
</span><span style="color:#800000;">14 </span><span style="background-color:#ffffff;">                    f.set(jp.getTarget(), </span><span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;">beanMap.</span><span style="background-color:#ffffff;">get(f.getName()));
</span><span style="color:#800000;">15 </span><span style="background-color:#ffffff;">                } </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">catch</span><span style="background-color:#ffffff;"> (IllegalAccessException e) {
</span><span style="color:#800000;">16 </span><span style="background-color:#ffffff;">                    </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">throw</span><span style="background-color:#ffffff;"> </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">new</span><span style="background-color:#ffffff;"> RuntimeException(e);
</span><span style="color:#800000;">17 </span><span style="background-color:#ffffff;">                }
</span><span style="color:#800000;">18 </span><span style="background-color:#ffffff;">            }
</span><span style="color:#800000;">19 </span><span style="background-color:#ffffff;">        }
</span><span style="color:#800000;">20 </span><span style="background-color:#ffffff;">    }
</span><span style="color:#800000;">21
22 </span><span style="background-color:#ffffff;">    </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">private</span><span style="background-color:#ffffff;"> Field[] getAllFields(JoinPoint jp) {
</span><span style="color:#800000;">23 </span><span style="background-color:#ffffff;">     </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">return</span><span style="background-color:#ffffff;"> jp.getTarget().getClass().getFields();
</span><span style="color:#800000;">24 </span><span style="background-color:#ffffff;">    }
</span><span style="color:#800000;">25 </span><span style="background-color:#ffffff;">}</span></pre>
<p><H2>Example usage</H2></p>
<pre><span style="color:#800000;"> 1 </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">class</span><span style="background-color:#ffffff;"> XYZ{
</span><span style="color:#800000;"> 2 </span><span style="background-color:#ffffff;">    </span><span style="background-color:#ffcccc;">…
</span><span style="color:#800000;"> 3 </span><span style="background-color:#ffffff;">    @InjectDependency </span><span style="color:#000080;background-color:#ffffff;font-weight:bold;">public</span><span style="background-color:#ffffff;"> IMarketDataSupplier marketDataSupplier;
</span><span style="color:#800000;"> 4 </span><span style="background-color:#ffffff;">    </span><span style="background-color:#ffcccc;">…
</span><span style="color:#800000;"> 5 </span><span style="background-color:#ffffff;">}
</span><span style="color:#800000;"> 6 </span></pre>
<p><H2>Summary</H2> <P><FONT face="Sans Serif">It is not perfect as it requires injected field to be public, but it does the job and is good enough for 10 minutes&#8230; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </FONT><FONT size="+0"></FONT></P><FONT size="+0"></FONT></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/piotrga.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/piotrga.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/piotrga.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/piotrga.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/piotrga.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/piotrga.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/piotrga.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/piotrga.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/piotrga.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/piotrga.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/piotrga.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/piotrga.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=piotrga.wordpress.com&blog=595023&post=3&subd=piotrga&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://piotrga.wordpress.com/2006/12/01/configurable-without-spring-in-10-minutes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d9b2bf89a10d0dfd765c2e95e8435bd8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Piotr Gabryanczyk</media:title>
		</media:content>
	</item>
	</channel>
</rss>