<?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/"
	>

<channel>
	<title>Module Lost &#187; servlet</title>
	<atom:link href="http://www.modlost.net/home/tag/servlet/feed" rel="self" type="application/rss+xml" />
	<link>http://www.modlost.net/home</link>
	<description>Thoughts about software development &#38; productivity</description>
	<lastBuildDate>Sat, 12 Jun 2010 03:05:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Spring: Obteniendo beans desde un servlet</title>
		<link>http://www.modlost.net/home/article/spring-obteniendo-beans-desde-un-servlet.html</link>
		<comments>http://www.modlost.net/home/article/spring-obteniendo-beans-desde-un-servlet.html#comments</comments>
		<pubDate>Sat, 28 Feb 2009 18:26:16 +0000</pubDate>
		<dc:creator>Abner</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Information Technologies]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.modlost.net/wordpress/?p=100</guid>
		<description><![CDATA[Una de las características más importantes de Spring Framework es la inyección de dependencias. Aplicando este patrón podemos lograr que las clases dependan de interfaces y no de alguna implementación específica, los beneficios de esta forma de trabajo son innumerables y pueden encontrar varios artículos que los describen a profundidad en internet y en la [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las características más importantes de <a href="http://www.springframework.org/">Spring Framework</a> es la <a href="http://en.wikipedia.org/wiki/Dependency_injection">inyección de dependencias</a>. Aplicando este patrón podemos lograr que las clases dependan de interfaces y no de alguna implementación específica, los beneficios de esta forma de trabajo son innumerables y pueden encontrar varios artículos que los describen a profundidad en internet y en la documentación de Spring.</p>
<p>Pero que sucede si nos encontramos con el siguiente problema:</p>
<p>Estamos usando Spring MVC en una aplicación web pero nos vemos obligados a implementar un Servlet. Dentro de este Servlet tenemos que invocar a un Service que ya esta siendo administrado por el contexto de Spring.</p>
<p><span id="more-100"></span>El consejo del <a>bug killer</a> puede llevarnos por dos caminos en este escenario:</p>
<ul>
<li>No buscar en internet a profundidad, ni preguntar y usar la solución más rápida que se te venga a la mente.</li>
<li>Seguir el buen diseño y obtener una referencia al Service administrado por Spring.</li>
</ul>
<p>En el primer caso tendríamos un Servlet implementado de la siguiente manera:</p>
<pre><code>
<span style="font-family: Monaco; font-size: 11px; line-height: normal; white-space: normal"><span style="color: #7f0055">public</span> <span style="color: #7f0055">class</span> DummyServlet <span style="color: #7f0055">extends</span> HttpServlet {</span>
<span style="color: #000000"><span style="white-space: pre"> </span></span>private<span style="color: #000000"> </span>static<span style="color: #000000"> </span>final<span style="color: #000000"> </span>long<span style="color: #000000"> </span><span style="color: #0000c0">serialVersionUID</span><span style="color: #000000"> = 1L;</span>

<span style="white-space: pre"> </span><span style="color: #7f0055">public</span> DummyServlet() {
<span style="white-space: pre">   </span><span style="color: #7f0055">super</span>();
<span style="white-space: pre"> </span>}

<span style="color: #000000"><span style="white-space: pre"> </span></span>@Override
<span style="white-space: pre"> </span><span style="color: #7f0055">protected</span> <span style="color: #7f0055">void</span> doGet(HttpServletRequest req, HttpServletResponse resp) <span style="color: #7f0055">throws</span> ServletException, IOException {
<span style="white-space: pre">   </span>DummyService service = new DummyServiceImpl();
<span style="white-space: pre">   </span>resp.getWriter().print(bean.getMessage());
<span style="white-space: pre"> </span>}
<span style="font-family: Monaco; font-size: 11px; line-height: normal; white-space: normal">}</span>
</code></pre>
<p><span style="font-weight: bold">¡Esta instanciando la implementación del Service directamente!</span>,&#8230; esto puede traer serios problemas si se tiene que cambiar el DummyServiceImpl por otro en un futuro próximo o lejano. Lo más probable es que no se actualice el Servlet y se presente un comportamiento no esperado del sistema.</p>
<p>En el segundo caso, usaríamos las mismas clases de Spring para obtener una referencia al Service:</p>
<pre><code>
<span style="font-family: Monaco; font-size: 11px; line-height: normal; white-space: normal"><span style="color: #7f0055">public</span> <span style="color: #7f0055">class</span> DummyServlet <span style="color: #7f0055">extends</span> HttpServlet {</span>
<span style="color: #000000"><span style="white-space: pre"> </span></span>private<span style="color: #000000"> </span>static<span style="color: #000000"> </span>final<span style="color: #000000"> </span>long<span style="color: #000000"> </span><span style="color: #0000c0">serialVersionUID</span><span style="color: #000000"> = 1L;</span>

<span style="white-space: pre"> </span><span style="color: #7f0055">public</span> DummyServlet() {
<span style="white-space: pre">   </span><span style="color: #7f0055">super</span>();
<span style="white-space: pre"> </span>}

<span style="color: #000000"><span style="white-space: pre"> </span></span>@Override
<span style="white-space: pre"> </span><span style="color: #7f0055">protected</span> <span style="color: #7f0055">void</span> doGet(HttpServletRequest req, HttpServletResponse resp) <span style="color: #7f0055">throws</span> ServletException, IOException {
<span style="white-space: pre">   </span>WebApplicationContext applicationContext = ContextLoader.getCurrentWebApplicationContext();
<span style="white-space: pre">   </span>DummyService service = (DummyService) applicationContext.getBean(<span style="color: #2a00ff">"DummyService"</span>);
<span style="white-space: pre">   </span>resp.getWriter().print(bean.getMessage());
<span style="font-family: Monaco; font-size: 11px; line-height: normal"><span style="white-space: pre"> </span>}</span>
<span style="font-family: Monaco; font-size: 11px; line-height: normal; white-space: normal">}</span>
</code></pre>
<p>Manteniendo de esa manera el diseño y el patrón de inyección de dependiencias.</p>
<p>Happy Hacking!</p>
<p>UPDATE: Para simplificar el ejemplo de este articulo solo se instancia el Service en el Servlet pero debemos tener en cuenta que el Service puede depender de clases DAO o puede necesitar AOP. Esto agravaría más los problemas de instanciar una clase que ya esta siendo manejada por el contenedor IoC.</p>




	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;bodytext=Una%20de%20las%20caracter%C3%ADsticas%20m%C3%A1s%20importantes%20de%20Spring%20Framework%20es%20la%20inyecci%C3%B3n%20de%20dependencias.%20Aplicando%20este%20patr%C3%B3n%20podemos%20lograr%20que%20las%20clases%20dependan%20de%20interfaces%20y%20no%20de%20alguna%20implementaci%C3%B3n%20espec%C3%ADfica%2C%20los%20beneficios%20de%20esta%20forma%20de" title="Digg"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;notes=Una%20de%20las%20caracter%C3%ADsticas%20m%C3%A1s%20importantes%20de%20Spring%20Framework%20es%20la%20inyecci%C3%B3n%20de%20dependencias.%20Aplicando%20este%20patr%C3%B3n%20podemos%20lograr%20que%20las%20clases%20dependan%20de%20interfaces%20y%20no%20de%20alguna%20implementaci%C3%B3n%20espec%C3%ADfica%2C%20los%20beneficios%20de%20esta%20forma%20de" title="del.icio.us"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;t=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet" title="Facebook"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;annotation=Una%20de%20las%20caracter%C3%ADsticas%20m%C3%A1s%20importantes%20de%20Spring%20Framework%20es%20la%20inyecci%C3%B3n%20de%20dependencias.%20Aplicando%20este%20patr%C3%B3n%20podemos%20lograr%20que%20las%20clases%20dependan%20de%20interfaces%20y%20no%20de%20alguna%20implementaci%C3%B3n%20espec%C3%ADfica%2C%20los%20beneficios%20de%20esta%20forma%20de" title="Google Bookmarks"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.friendfeed.com/share?title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html" title="FriendFeed"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;source=Module+Lost+Thoughts+about+software+development+%26amp%3B+productivity&amp;summary=Una%20de%20las%20caracter%C3%ADsticas%20m%C3%A1s%20importantes%20de%20Spring%20Framework%20es%20la%20inyecci%C3%B3n%20de%20dependencias.%20Aplicando%20este%20patr%C3%B3n%20podemos%20lograr%20que%20las%20clases%20dependan%20de%20interfaces%20y%20no%20de%20alguna%20implementaci%C3%B3n%20espec%C3%ADfica%2C%20los%20beneficios%20de%20esta%20forma%20de" title="LinkedIn"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet%20-%20http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html" title="Twitter"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;t=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet" title="MySpace"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;body=Una%20de%20las%20caracter%C3%ADsticas%20m%C3%A1s%20importantes%20de%20Spring%20Framework%20es%20la%20inyecci%C3%B3n%20de%20dependencias.%20Aplicando%20este%20patr%C3%B3n%20podemos%20lograr%20que%20las%20clases%20dependan%20de%20interfaces%20y%20no%20de%20alguna%20implementaci%C3%B3n%20espec%C3%ADfica%2C%20los%20beneficios%20de%20esta%20forma%20de" title="Ping.fm"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" /></a>
	<a rel="nofollow"  target="_blank" href="http://slashdot.org/bookmark.pl?title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html" title="Slashdot"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.modlost.net/home/article/spring-obteniendo-beans-desde-un-servlet.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
