Está en la página 1de 6

GNU Free Documentation License

En linea: http://www.geocities.com/neos_software/articles/j2se/spring.html
Autor: Mario Hidalgo Martinez
Fecha de Creacin: 09/Noviembre/2006
Objetivo: Mostrar la manera de utilizar Deendenc! "n#ection
Descripcion: $l resente %rt&culo retende mostrar el rinciio en el 'ue esta
basado (ring )rame*or+, Deendenc! "n#ection esto atrav-s de una r.ctica
usando $clise/
Contenido
1. Introduccion
$l origen de (ring )rame*or+ se remonta al )rame*or+ llamado "nter)ace 20 el
cual )ue utilizado en el libro 1$2ert 3ne to 3ne 42$$ Design and
Develoment1 escrito or 5od 4o6nson7 desu-s se le cambio el nombre a
(ring Frame*or+7 desde la rimera versi8n lanzada en Marzo del 2009 (ring
)rame*or+ es 3en (ource ! el c8digo )uente esta ba#o la licencia %ac6e7
algunas de las razones ara utilizar (ring )rame*or+ son las siguientes,
:ermite 6acer un dise;o or medio de inter)aces de una manera sencilla/
"mlementa atrones de dise;o/
La documentaci8n es e2tensa/
$s un )rame*or+ oen source/
(e comunica ).cilmente con otros )rame*or+s como lo son, (truts7
Hibernate7 i<atis7 =aestr!7 entre otros/
Dependency Injection
La ar'uitectura de (ring esta basada en atr8n de dise;o llamado
1Deendenc! "n#ection17 5ob Harro de)ine a este atr8n como, 1$s la manera
de e2ternalizar la creaci8n ! el mane#o de las deendencias de los
comonentes1 /
:ara comrender el atr8n Deendenc! "n#ection considere la )igura 0 la cual
es un diagrama de clases7 la clase Foo deende de una instancia de la clase
<ar7 ara realizar alg>n tio de rocesamiento7 tradicionalmente en la clase
Foo se tendr&a la sentencia <ar bar?ne* <ar@AB ara crear el ob#eto bar7 usando
Deendenc! "n#ection una instancia de <ar @o bien una subclaseA es
roorcionada a la clase Foo en tiemo de e#ecuci8n or alg>n roceso
e2terno7 es decir la clase Foo no llama a crear el ob#eto bar si no 'ue el
roceso e2terno le roorciona el ob#eto bar a la clase Foo7 es or eso 'ue 5od
4o6nson de)ine a Deendenc! "n#ection con la )rase, 1No me llames7 !o te
llamo1/
GNU Free Documentation License
En linea: http://www.geocities.com/neos_software/articles/j2se/spring.html
Figura 0/ Deendencia entre clases
Pull Dependecy Injection
$sta es la manera m.s sencilla de obtener una instancia de una clase usando
Deendec! "n#ection7 ara entender el )uncionamiento se utilizar. un "nter)ace !
una imlementaci8n de la inter)ace7 el diagrama de clases se muestra en la
)igura 2/ (e utiliza una "nter)ace llamada (ervice la cual tiene un m-todo
denominado do:rocess7 esta inter)ace ser. utilizada en un m-todo main7 esta
es una aro2imaci8n a lo 'ue se le denomino anteriormente a rogramar en
base a inter)aces7 la imlementaci8n ser. obtenida usando Deendec!
"n#ection/
Figura 2/ Diagrama de Clases :ull Deendenc! "n#ection
Practica 1. Aplicando Dependency Injection en Eclipse.
0/ Deber. crear un nuevo ro!ecto 4ava nombrelo :ullDeendenc!
2/ Deber. descargar los 4ars de (ring )rame*or+ )rame*or+
D/ Deber. crear dos caretas )uente llamadas src ! resources como lo muestra
la siguiente imagen/
9/ %6ora agregue una careta llamada lib/
GNU Free Documentation License
En linea: http://www.geocities.com/neos_software/articles/j2se/spring.html
E/ Deber. agregar los siguientes #ars a la careta lib, sring/#ar7 commonsF
logging/#ar7 log9#F0/2/9/#ar
6/ %6ora agregue los #ars al classat6 del ro!ecto seleccionand %dd 4ars !
agregue los tres #ars antes mencionados/
G/ %6ora en la careta src deber. agregar las siguientes clases/
"nter)ace (ervice
package org.neos.model.interfaces;
public interface Service {
public String doProcess();
}
Clase (ervice"ml
package org.neos.model.impl;
import org.neos.model.interfaces.Service;
public class ServiceImpl implements Service {
public String doProcess() {
return "Hola undo Spring";
}
}
GNU Free Documentation License
En linea: http://www.geocities.com/neos_software/articles/j2se/spring.html
Clase :ull Deendenc! "n#ection/ Como odemos darnos cuenta en el c8digo
)uente de la clase :ullDeendenc!"n#ection se utilza la inter)az (ervice ! no la
imlementaci8n (ervice"ml7 aun'ue en tiemo de e#ecuci8n se utiliza una
re)erencia a (ervice"ml/
package org.neos.test;
import org.apac!e.log"#.$ogger;
import org.apac!e.log"#.%ml.&'(onfigurator;
import org.neos.model.interfaces.Service;
import org.springframe)ork.conte%t.*pplication(onte%t;
import
org.springframe)ork.conte%t.support.(lassPat!+ml*pplication(onte%t;
public class Pull&ependenc,In#ection {
--logger
static $ogger logger .
$ogger.get$ogger(Pull&ependenc,In#ection.class);
public static void main(String args/0) {

--'btiene la informacion de los beans configurados en el
arc!ivo
--spring.%ml
*pplication(onte%t ct% . ne)
(lassPat!+ml*pplication(onte%t("spring.%ml");

--(onfigura $og"#
&'(onfigurator.configure("logging.%ml");
--'btiene la implementacion de la interfa1 Service por medio de
Spring 2rame)ork
--esto lo !ace atraves de un id configurado en spring.%ml en este
caso el bean se
--llama service
Service service.(Service)ct%.get3ean("service");
--e#ecuta un metodo de la interfa1
logger.debug(service.doProcess());

}
}
La con)iguraci8n es el unto central ara 'ue (ring realice el Deendec!
"n#ection7 esta con)iguraci8n se realiza or medio de un arc6ivo HML7 observe
'ue en la clase :ullDeendenc!"n#ection se utiliza un 3b#eto llamado ct2 el cual
es el resonsable de obtener la imlementaci8n de la inter)az (ervice or
medio del m-todo get<ean@A/
GNU Free Documentation License
En linea: http://www.geocities.com/neos_software/articles/j2se/spring.html
La con)iguraci8n del arc6ivo sring/2ml de este e#emlo es mostrada en la
)igura D/67 observe 'ue se tiene la ItagJ bean la cual indica 'ue se esta
con)igurando una instancia 'ue en el c8digo )uente ser. obtenida con el id
llamado 1service1 ! la clase a la cual 6ace re)erencia es
org/neos/model/iml/(ervice"ml7 es or tal motivo 'ue en la l&nea (ervice
service?@(erviceAct2/get<ean@1service1AB se obtiene la imlementaci8n de la
inter)az (ervice/
K/ $n la careta resources deber. de crear un nuevo arc6ivo HML ! nombrelo
sring/2ml deber. tener el siguiente contenido
45%ml version."6.7" encoding."892:;"5<
4=&'(9>P? beans P83$I( ":--SP@IAB--&9& 3?*A--?A"
"!ttpC--))).springframe)ork.org-dtd-spring:beans.dtd"<
4=:: (onfigura un bean llamado service::<
4beans<
4bean id."service" class."org.neos.model.impl.ServiceImpl" -<
4-beans<
%gregue los siguientes arc6ivos al ro!ecto log9#/dtd7 logging/2ml estos
arc6ivos los uede descargar a'ui los cuales son arte de la con)iguraci8n de
Log947 si desea ma!or in)ormaci8n acerca de este tema diri#ase al articulo
=raba#ando con L3G9# 'ue Hugo Hidalgo 6a creado ara Neos (o)t*are Labs/
9/ $#ecuci8n del :rograma
$#ecute la clase :ullDeendenc!"n#ection ! deber. observar la siguiente salida/
GNU Free Documentation License
En linea: http://www.geocities.com/neos_software/articles/j2se/spring.html
2006F00F00 02,0G,9D Lorg/neos/test/:ullDeendenc!"n#ectionM D$<UG F Hola
Mundo (ring
Conclusiones, Hemos comrendido or medio de este articulo la manera de
obtener la re)erencia de un ob#eto or medio de (ring )rame*or+ usando
:ullDeendenc!"n#ection lo cual uede ser usado en la caa de modelo de una
alicaci8n emresarial7 la manera de usar otras )ormas de Deendenc!
"n#ection ser.n vistas en art&culos osteriores/
Neos (o)t*are Labs 2006 6tt,//***/geocities/com/neosNso)t*are/

También podría gustarte