<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gianu</id>
		<title>Dos Ideas. - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gianu"/>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/Especial:Contribuciones/Gianu"/>
		<updated>2026-05-29T20:31:20Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=The_Core&amp;diff=3503</id>
		<title>The Core</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=The_Core&amp;diff=3503"/>
				<updated>2009-10-15T17:36:55Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Notas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[The Core]] es un conjunto de protocolos y prácticas para la [[Conformación de equipos]] efectivos.&lt;br /&gt;
&lt;br /&gt;
Los protocolos de The Core son &amp;quot;mejores prácticas&amp;quot; para las personas, equipos de personas y organizaciones que quieren obtener grandes resultados - todo el tiempo. Son &amp;quot;Core&amp;quot; (núcleo) porque son fundacionales - pueden ser usados por todos los equipos, en todo lugar, incluso si ya tienen patrones organizaciones y mejores prácticas propias. Son &amp;quot;protocolos&amp;quot; porque nombran y prescriben formas de interacción entre las personas (comportamiento), que resultan predecibles, como los &amp;quot;protocolos&amp;quot; que se usan en la diplomacia. &lt;br /&gt;
&lt;br /&gt;
Entonces, los protocolos de The Core: &lt;br /&gt;
* son tácticas que las personas pueden usar para obtener mejores resultados&lt;br /&gt;
* los pueden usar individuos, equipos y organizaciones&lt;br /&gt;
* son de &amp;quot;[[Software Libre]]&amp;quot; y &amp;quot;versionados&amp;quot; (se mejoran con el tiempo), al igual que el software&lt;br /&gt;
&lt;br /&gt;
Suena interesante, ¿no?&lt;br /&gt;
&lt;br /&gt;
A continuación dejamos una traducción de [http://www.mccarthyshow.com/LearnForFree/BestPracticesTheCoreProtocols/tabid/65/Default.aspx The Core Protocolos v 3.02]. &lt;br /&gt;
Pueden leer más sobre [[The Core]] en el libro '''Software for your head''', de Jim y Michele McCarthy (ISBN 0-201-60456-6).&lt;br /&gt;
&lt;br /&gt;
== Los protocolos de The Core v 3.02 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;'''(The Core está distribuido bajo la [http://www.gnu.org/licenses/gpl.txt licencia GNU -PL]. The Core se considera como el código fuente bajo esa licencia. Son libres de usar, distribuir este trabajo o cualquier derivado que hagan, siempre y cuando también distribuyan este documento fuente en forma completa, incluyendo este párrafo).'''&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Los compromisos de The Core ===&lt;br /&gt;
# Me comprometo a estar involucrado cuando estoy presente.&lt;br /&gt;
#* A conocer e informar&lt;br /&gt;
#** lo que quiero,&lt;br /&gt;
#** lo que pienso, y &lt;br /&gt;
#** lo que siento.&lt;br /&gt;
#* A siempre buscar ayuda efectiva.&lt;br /&gt;
#* A no ofrecer y negarme a aceptar transmiciones emocionales incoherentes.&lt;br /&gt;
#* Cuando tengo o escucho una mejor idea que la actual, inmediantamente voy a&lt;br /&gt;
#** proponerla para una aceptación decisiva o rechazo, y/o&lt;br /&gt;
#** explícitamente voy a buscar que se mejore&lt;br /&gt;
#* Personalmente voy a apoyar la mejor idea&lt;br /&gt;
#** sin importar de quien venga, &lt;br /&gt;
#** sin importar cuánto desee que aparezca otra mejor idea más tarde, y&lt;br /&gt;
#** cuando no tengo una idea alternativa superior.&lt;br /&gt;
# Voy a buscar percibir más de lo que busco ser percibido.&lt;br /&gt;
# Voy a usar los equipos, en especial cuando llevo adelante tareas difíciles.&lt;br /&gt;
# Voy a hablar siempre y sólo cuando creo que voy a mejorar el ratio general resultado/esfuerzo.&lt;br /&gt;
# Voy a ofrecer y aceptar sólo comportamiento y comunicación racional y orientada a resultados.&lt;br /&gt;
# Me voy a desinvolucrar de situaciones menos productivas&lt;br /&gt;
#* cuando no pueda mantener este compromiso&lt;br /&gt;
#* cuando es más importante que me involucre en otro lugar.&lt;br /&gt;
# Voy a hacer ahora lo que debe hacerse eventualmente y puede hacerse efectivamente ahora.&lt;br /&gt;
# Voy a buscar avanzar hacia un objetivo en particular, llevando mi comportamiento hacia la acción.&lt;br /&gt;
# Voy a usar los Protocolos de The Core (o mejores) cuando sea aplicable.&lt;br /&gt;
#* Voy a ofrecer y aceptar a tiempo y usar adecuadamente el Protocolo de [[Check-In]]&lt;br /&gt;
# No voy a lastimar -ni tolerar que lastimen- a nadie por su fidelidad a estos compromisos.&lt;br /&gt;
# No voy a hacer nada tonto a propósito.&lt;br /&gt;
&lt;br /&gt;
=== Pasar (Despasar) ===&lt;br /&gt;
El protocolo [[Pasar]] es para declinar la participación en algo. Usalo cada vez que no quieras participar en una actividad. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Cuando decidís no participar, decí &amp;quot;Paso&amp;quot;.&lt;br /&gt;
# Podés despasar en cualquier momento que quieras. Despasá ni bien sepas que querés participar otra vez, diciendo &amp;quot;Despaso&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Mantener privados los motivos de pasar.&lt;br /&gt;
* Pasar en algo ni bien somos conscientes de que vamos a pasar. &lt;br /&gt;
* Respetar el decho de los demás a pasar sin explicación.&lt;br /&gt;
* No juzgar, avergonazar, molestar, interrogar ni castigar a alguien que pasa. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* En general, no vas a estar bien parado frente a los Compromisos de The Core si pasás la mayor parte del tiempo.&lt;br /&gt;
* Podés pasar de cualquier actividad; sin embargo, si adoptás los Compromisos de The Core, no podés pasar en un voto de [[Decisión]] y tenés que decir &amp;quot;Estoy presente&amp;quot; al hacer el [[Check-In]].&lt;br /&gt;
* Podés pasar aunque ya hayas empezado algo. &lt;br /&gt;
&lt;br /&gt;
=== Check-In ===&lt;br /&gt;
Usá el [[Check-In]] para empezar reuniones o en cualquier momento que un Check-In individual o grupal agregue valor a las interacciones del equipo.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# La persona dice &amp;quot;Me siento [uno o más de ENOJADO, TRISTE, CONTENTO, ASUSTADO]&amp;quot;. La persona puede dar una breve explicación. O si otros ya hacieron su check-in, la persona puede decir &amp;quot;Paso&amp;quot;. (ver el protocolo [[Pasar]]).&lt;br /&gt;
# La persona dice &amp;quot;Estoy presente&amp;quot;. Esto significa que la persona se comportará de acuerdo a los Compromisos de The Core. &lt;br /&gt;
# El resto de las personas responden &amp;quot;Bienvenido&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Decir los sentimientos sin adjetivos.&lt;br /&gt;
* Decir los sentimientos sólo sin nos pertenecen.&lt;br /&gt;
* Estar callados durante el Check-In de otra persona.&lt;br /&gt;
* No referirse al Check-In de otra persona sin su permiso explícito para hacerlo.&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* En el contexto de los Protocolos de The Core, todas las emociones se expresan a través de una combinación de ENOJADO, TRISTE, CONTENTO o ASUSTADO. Por ejemplo, &amp;quot;ansioso&amp;quot; puede ser una combinación de CONTENTO y ASUSTADO.&lt;br /&gt;
* Hacer el Check-In lo más profundo posible. Lo normal es hacer el check-in con dos o más emociones. La profundidad del Check-In del grupo se traduce directamente en la calidad de los resultados del grupo.&lt;br /&gt;
* No hacer nada por disminuir el estado emocional. No describirnos como &amp;quot;un poquito&amp;quot; enojado, triste, contento o asustado, ni tampoco decir &amp;quot;Estoy enojado, PERO igual estoy contento&amp;quot;. &lt;br /&gt;
* Excepto en los grupos muy grandes, si más de una persona hace el check-in, es recomendable que todos lo hagan.&lt;br /&gt;
* FELIZ puede ser un sustito de CONTENTO, y CON MIEDO puede ser un sustitio de ASUSTADO.&lt;br /&gt;
&lt;br /&gt;
=== Check-Out ===&lt;br /&gt;
El [[Check-Out]] requiere que nuestra presencia física siempre signifique nuestro involucramiento. Debemos hacer un Check-Out cuando somos conscientes que no podemos mantener los Compromisos de The Core o cuando es mejor para nosotros estar en otro lugar. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Decir &amp;quot;Hago un Check-Out&amp;quot;.&lt;br /&gt;
# Físicamente dejar al grupo hasta que estemos listos para hacer un nuevo Check-In.&lt;br /&gt;
# Opcionalmente, si lo sabemos y es relevante, podemos decir cuándo pensamos volver. &lt;br /&gt;
# Quienes están presentes al momento del Check-Out no deben seguir a la persona, preguntar o hablar sobre el Check-Out de la persona. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Retornar ni bien podamos seguir los Compromisos de The Core.&lt;br /&gt;
* Retonar y hacer un Check-In sin llamar la atención por nuestro retorno.&lt;br /&gt;
* No juzgar, avergonzar, molestar, interrogar o castigar a nadie que hace un Check-out. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Cuando hacemos un Check-Out hacerlo de la forma más calmada que sea posible, de manera de causar la menor interrupción posible a los demás.&lt;br /&gt;
* Hacer un Check-Out si nuestra estado emocional nos impide colaborar, si tenemos una recepción baja a nueva información, o si no sabemos lo que queremos.&lt;br /&gt;
* El Check-Out es admitir que no podemos contribuir en ese momento.&lt;br /&gt;
&lt;br /&gt;
=== Pedir ayuda ===&lt;br /&gt;
El protocolo de [[Pedir ayuda]] nos permite hacer un uso eficiente de las habilidades y conocimientos de otros. Pedir ayuda es el acto que cataliza la [[Conexión]] y uan [[Visión compartida]]. Debemos usarlo continuamente, antes y durante la búsqueda de cualquier resultado. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Quien pide le pregunta a otro; &amp;quot;[Nombre de quien ayuda], ¿harías X?&amp;quot;.&lt;br /&gt;
# Quien pide expresa todas las cosas específicas o restricciones de la petición.&lt;br /&gt;
# Quien ayuda responde diciendo &amp;quot;Si&amp;quot; o &amp;quot;No&amp;quot;, u ofreciendo una forma alternativa de ayuda. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Siempre empezar el Protocolo de Pedir ayuda con la frase &amp;quot;¿harías....?&amp;quot;.&lt;br /&gt;
* Tener una comprensión clara de lo que queremos que haga quien nos ayuda, o si no tenemos en claro la ayuda que queremos, dejarlo en claro diciendo &amp;quot;No estoy seguro con qué necesito ayuda, ¿me ayudarías?&amp;quot;.&lt;br /&gt;
* Asumir que todos quienes ayudan están siempre disponibles, y confiar que cada uno de quienes ayudan aceptan la responsabilidad de decir &amp;quot;No&amp;quot;. &lt;br /&gt;
* Decir &amp;quot;No&amp;quot; cada vez que no querramos ayudar. &lt;br /&gt;
* Aceptar la respuesta &amp;quot;No&amp;quot; sin hacer preguntas ni un drama emocional.&lt;br /&gt;
* Ser receptivos de la ayuda ofrecida. &lt;br /&gt;
* Ofrecer nuestra mejor ayuda incluso aunque no sea lo que está esperando quien pide. &lt;br /&gt;
* Postponer el pedido de ayuda si no podemos estar completamente involucrados.&lt;br /&gt;
* Pedir más información si no tenemos en claro en qué consiste la ayuda que nos piden.&lt;br /&gt;
* No disculparse por pedir ayuda. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Es &amp;quot;barato&amp;quot; pedir ayuda. El peor resultado es un &amp;quot;No&amp;quot;, lo que nos deja ni más adelante ni más atrás de antes de pedir. En el mejor escenario, reducimos el tiempo para hacer una tarea y/o aprender. &lt;br /&gt;
* Quienes ayudan deben decir &amp;quot;No&amp;quot; si no están seguros de querer ayudar. No deben decir nada más después de negarse. &lt;br /&gt;
* No podemos &amp;quot;pedir demasiada ayuda&amp;quot; a una persona, a menos que explícitamente esa persona haya pedido que se respete un límite en particular. &lt;br /&gt;
* Si no comprendemos el valor de lo que se ofrece, o sentimos que no sería útil, o creemos que ya consideramos y rechazamos la idea anteriormente, usemos una postura curiosa en vez de rechazar automáticamente con un &amp;quot;pero...&amp;quot; (ver el protocolo [[Investigar]])&lt;br /&gt;
* Pedir cuando hay problemas quienes decir que esperamos demasiado tiempo para pedir ayuda. Debemos pedir ayuda cuando nos está yendo bien. &lt;br /&gt;
* El simple hecho de conectarnos con alguien, incluso cuando esta persona no sepa nada del tema, pueden ayudarnos a encontrar respuestas dentro de nosotros mismos, especialmente si le pedimos a esa persona que nos Investigue.&lt;br /&gt;
&lt;br /&gt;
=== Comprobación de protocolo ===&lt;br /&gt;
Usar la Comprobación de protocolo cuando creemos que se está usando un protocolo de forma incorrecta, o cuando se está rompiendo uno de los Compromisos de The Core. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Decir &amp;quot;Comprobación de protocolo&amp;quot;.&lt;br /&gt;
# Si sabemos el uso correcto del protocolo, decirlo. Sino, [[Pedir ayuda]].&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Decir &amp;quot;Comprobación de protocolo&amp;quot; ni bien seamos conscientes del uso incorrecto de un protocolo, o si se viola alguno de los Compromisos de The Core. Hacerlo sin importar la actividad que se esté llevando a cabo.&lt;br /&gt;
* Apoyar a cualquiera que use la Comprobación de protocolo.&lt;br /&gt;
* No avergonzar ni castigar a nadie que use la Comprobación de protocolo.&lt;br /&gt;
* [[Pedir ayuda]] ni bien nos demos cuenta que no sabemos el uso correcto de un protocolo.&lt;br /&gt;
&lt;br /&gt;
=== Comprobación de intención ===&lt;br /&gt;
Usar la [[Comprobación de intención]] para clarificar el propósito de nuestro comportamiento, o el de otros. Usarlo cuando no estamos esperando un resultado positvo del comportamiento actual. La [[Comprobación de intención]] verifica la integridad de la intención propia y de otros en un caso dado. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Preguntar &amp;quot;¿Cuál es mi/tu intención con X?&amp;quot;, donde X es algún tipo de comportamiento actual o pendiente de la persona cuya intención queremos conocer. &lt;br /&gt;
# Si resulta útil, preguntar &amp;quot;¿Qué respuesta o comportamiento querés de alguien como resultado de X?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Ser consciente de nuestra propia intención antes de comprobar la intención de otros.&lt;br /&gt;
* Investigar lo suficiente para descubrir la intención de la persona o de sus acciones.&lt;br /&gt;
* Asegurarse de tener la intención de resolver cualquier conflicto de manera pacífica antes de comprobar la intención de otra persona. Si no tenemos una intención pacífica, hacer un [[Check-Out]].&lt;br /&gt;
* No ser defensivos cuando alguien nos pregunta cuál es nuestra intención. Si no podemos, hacer un [[Check-Out]].&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Si aparece un conflicto que parece irresoluble, hacer un [[Check-Out]] o [[Pedir ayuda]].&lt;br /&gt;
&lt;br /&gt;
=== Decisión ===&lt;br /&gt;
Usar [[Decisión]] cada vez que querramos avanzar al equipo de forna inmediata y unánime hacia resultados.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# El proponente dice &amp;quot;Propongo [comportamiento consiso y accionable]&amp;quot;.&lt;br /&gt;
# El proponente dice &amp;quot;1-2-3&amp;quot;.&lt;br /&gt;
# Los votantes votan simultáneamente, usando un &amp;quot;Si&amp;quot; (pulgar arriba), &amp;quot;No&amp;quot; (pulgar abajo) o &amp;quot;Lo apoyo&amp;quot; (mano plana). &lt;br /&gt;
# Los votantes que no pueden aceptar la propuesta bajo ningún punto de vista deben expresarlo abiertamente diciendo &amp;quot;Mi voto es un no absoluto. No voy a apoyarlo&amp;quot;. Si esto ocurre, se retira la propuesta.&lt;br /&gt;
# El proponente cuenta los votos. &lt;br /&gt;
# El proponente retira la propuesta si la combinación de votos &amp;quot;No&amp;quot; y votos &amp;quot;Lo apoyo&amp;quot; es demasiado grande, o si el proponente no espera concluir con éxito la [[Resolución]] (ver a continuación). Podemos aproximar este &amp;quot;demasiado grande&amp;quot; usando la siguiente heurística: &lt;br /&gt;
#* aproximadamente el 50% (o más) de los votos son &amp;quot;Lo apoyo&amp;quot;, o&lt;br /&gt;
#* la ganancia esperada de la propuesta si fuera aprobada es menor que el costo por el esfuerzo de la [[Resolución]].&lt;br /&gt;
# El proponente usa el Protocolo de [[Resolución]] con cada votante &amp;quot;No&amp;quot; para acercarlo a la propuesta, preguntándole &amp;quot;¿Qué sería necesario para que aceptes?&amp;quot;.&lt;br /&gt;
# El proponente declara aceptada a la propuesta si todos los votos &amp;quot;No&amp;quot; cambian a &amp;quot;Si&amp;quot; o &amp;quot;Lo apoyo&amp;quot;. &lt;br /&gt;
# El equipo ahora está comprometido a la acción.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Proponer no más de un elemento por propuesta.&lt;br /&gt;
* Mantenerse presente hasta que esté terminado el protocolo de [[Decisión]]; siempre estar conscientes de cómo nuestro comportamiento afecta al equipo, haciendolo avanzar o poniendo obstáculos.&lt;br /&gt;
* Dar nuestra máxima atención a la propuesta por sobre cualquier otra actividad. &lt;br /&gt;
* Hablar sólo cuando se es el proponente, o cuando el proponente nos pide hablar. &lt;br /&gt;
* Durante el protocolo, no expresar los motivos por los cuales votamos como lo hicimos.&lt;br /&gt;
* Revelar inmediatamente cuando somos un votante &amp;quot;No absoluto&amp;quot;, y estar listos a proponer una mejor idea. &lt;br /&gt;
* Ser personalmente responsable por lograr los resultados del compromiso de la Decisión, incluso aunque haya sido hecha en nuestra ausencia. &lt;br /&gt;
* Mantenerse informados sobre los compromisos de una Decisión hechos en nuestra ausencia. &lt;br /&gt;
* No discutir con un votante &amp;quot;No absoluto&amp;quot;. Siempre pedirle una idea mejor.&lt;br /&gt;
* Apoyar activamente las decisiones tomadas. &lt;br /&gt;
* Usar la capacidad de &amp;quot;parar el carro&amp;quot; al decir &amp;quot;no me van a convencer sin importar qué pase&amp;quot; con mucha discresión y lo más infrecuentemente posible.&lt;br /&gt;
* Insitir todo el tiempo que se sigan los protocolos de [[Decisión]] y [[Resolución]] tal cual están prescriptos, sin importar cuántas veces nos encontremos insistiendo en esto. &lt;br /&gt;
* No [[Pasar]] durante una [[Decisión]].&lt;br /&gt;
* Trabajar incesantemente para avanzar; estar enfocados a la acción.&lt;br /&gt;
* No mirar cómo votan los demás para elegir nuestro voto.&lt;br /&gt;
* Evitar usar el protocolo de [[Decisión]] en grupos grandes. Dividir al grupo grande en pequeños subgrupos para tomar decisiones, y usar el grupo grande para informar el estado.&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Votar &amp;quot;No&amp;quot; sólo cuando realmente creemos que nuestra contribución para hacer avanzar al equipo después de detenerlo con nuestro voto supera ampliamente el (en general alto) costo que agregamos por votar &amp;quot;No&amp;quot;. &lt;br /&gt;
* Si no estamos seguros o confusos por la propuesta, apoyarla y buscar clarificación luego de que la propuesta esté resuelta. Si tenemos una propuesta alternativa después de recibir más información, podemos estar seguros que nuestro equipo apoyará la mejor idea (recordar los Compromisos de The Core). &lt;br /&gt;
* Votar &amp;quot;No&amp;quot; para hacer cambios menores a lo que de otra manera es una propuesta aceptable sólo detiene el avance del equipo y debería evitarse. En cambio, ofrecer una propuesta adicional después de aprobar la actual o, mejor aún, involucrarse en la implementación para asegurarnos que nuestra idea se lleva adelante. &lt;br /&gt;
* Retirar las propuestas débiles. Si una propuesta recibe menos del 70% (aproximado) de votos &amp;quot;Si&amp;quot;, es una propuesta débiles y el proponente debería retirarla. Sin embargo, esta decisión queda a criterio del proponente. &lt;br /&gt;
* Cada vez que votemos &amp;quot;No&amp;quot; pensar como si fueramos el único votante no. &lt;br /&gt;
* Votar &amp;quot;No absoluto&amp;quot; sólo cuando estemos convencidos de tener una contribución importante para hacer a la dirección o liderazgo del equipo, o cuando la integridad lo requiere absolutamente.&lt;br /&gt;
&lt;br /&gt;
=== Resolución ===&lt;br /&gt;
Cuando un voto por [[Decisión]] resulta en una pequeña minoria de disidentes, el proponente lleva rápidamente al equipo, de manera estructurada, a negociar con los disientes. El protocolo de [[Resolución]] promueve que el equipo avance al enfcarse en traer a los disidentes al menor costo.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# El proponente pregunta al disidente &amp;quot;¿Qué sería necesario para que aceptes?&amp;quot;&lt;br /&gt;
# El disidente dice la modificación que él requiere, usando una oración única, corta y declarativa. &lt;br /&gt;
# El proponente ofrece adoptar los cambios del disidente o descarta la propuesta. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Si los cambios del disidente son simples, basta con realizar un chequeo visual para determinar si todos siguen aceptando la propuesta.&lt;br /&gt;
* Si los cambios del disidente son complejos, el proponente debe retirar la propuesta actual y luego crear una nueva propuesta que incluya los cambios del disidente. &lt;br /&gt;
* Si el disidente comienza a explicar porqué votó &amp;quot;No&amp;quot; o a explicar cualquier otra cosa que no sea lo necesaria para que acepte, el proponente lo debe interrumpir con &amp;quot;¿Qué sería necesario para que aceptes?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Juego de perfección ===&lt;br /&gt;
El protocolo del [[Juego de perfección]] nos apoyará en nuestro deseo de agregar las mejores ideas. Usarlo cada vez que deseamos mejorar algo que creamos. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# El Perfeccionista realiza un acto o presenta un objeto para perfeccionar, opcionalmente diciendo &amp;quot;Empiezo&amp;quot; y &amp;quot;Terminó&amp;quot; para notificar al Perfeccionador el final de la actuación.&lt;br /&gt;
# El Perfeccionador califica el valor de la actuación o del objeto en un escala de 1 al 10, basándose en cuánto valor el Perfeccionador cree poder agregar. &lt;br /&gt;
# El Perfeccionador dice &amp;quot;Lo que me gusta de la actuación o del objeto X es...&amp;quot; y procede a listar las cualidades del objeto que el Perfeccionador cree que son de alto valor y que deberían amplificarse. &lt;br /&gt;
# El Perfeccionador ofrece las mejoras a las actuación o al objeto para obtener la calificación &amp;quot;10&amp;quot; diciendo &amp;quot;Para obtener un diez, deberías hacer X&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Aceptar la perfección sin cuestionar. &lt;br /&gt;
* Dar sólo comentarios positivos: lo que nos gusta y lo que debería hacerse para &amp;quot;lograr el 10&amp;quot;. &lt;br /&gt;
* Abstenerse de mencionar lo que no nos gusta, o ser negativo en cualquier otra forma. &lt;br /&gt;
* Quitar puntos sólo si podemos pensar en alguna mejora. &lt;br /&gt;
* Usar calificaciones que reflejen la escala de mejora en vez de una escala de cuánto nos gustó el objeto. &lt;br /&gt;
* Si no podés decir algo de lo que te gustó del objeto o no podés especificar cómo hacer mejor al objeto, tenés que calificar con un &amp;quot;10&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* La calificación de &amp;quot;10&amp;quot; significa que no podemos agregar valor, y una calificación de &amp;quot;5&amp;quot; significa que vamos a describir cómo hacer que el objeto sea el doble de bueno.&lt;br /&gt;
* La información importante para transmitir en el protocolo del [[Juego de perfección]] mejora a la actuación o al objeto. Por ejemplo, &amp;quot;El sonido idea de un chasquido de dedos para mi es claro, tiene suficiente volumen, y me sorprende. Para obtener un 10, deberías mejorar la claridad&amp;quot;. &lt;br /&gt;
* Como Perfeccionista, sólo podemos hacer preguntas para clarificar o recolectar más información para mejorar. Si no estás de acuerdo con las ideas que te ofrecen, simplemente no las incluyas.&lt;br /&gt;
&lt;br /&gt;
=== Alineamiento personal ===&lt;br /&gt;
El protocolo de [[Alineamiento personal]] ayuda a entrar con profunidad en los deseos y encontrar lo que nos bloquea en obtener lo que queremos. Usarlo para descubrir, articular, y lograr lo que queremos. La calidad del alineamiento será igual a la calidad de nuestros resultados. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Deseo. Responder a la pregunta: &amp;quot;¿Qué quiero específicamente?&amp;quot;.&lt;br /&gt;
# Bloqueo. Preguntarnos, &amp;quot;¿Qué me está bloqueando en obtener lo que quiero?&amp;quot;.&lt;br /&gt;
# Virtud. Averiguar qué podría quitar este bloqueo respondiendo la pregunta &amp;quot;¿Qué virtud -si la tuviera- podría destruir este bloqueo mio?&amp;quot;.&lt;br /&gt;
# Cambio. Fingir que la virtud que identificamos es en realidad lo que queremos.&lt;br /&gt;
# Otra vez. Repetir los pasos 2-4 hasta que este proceso descubra una virtud que sea lo suficientemente poderosa como para destruir los bloqueos y nos obtenga lo que originalmente creíamos querer. &lt;br /&gt;
# Listo. Ahora escribí una oración de alineamiento personal de la forma &amp;quot;Quiero [virtud]&amp;quot;. Por ejemplo, &amp;quot;Quiero coraje&amp;quot;. &lt;br /&gt;
# Señal / Respuesta / Asignación. Crear una señal para que otros sepan que estás practicando tu alineamiento, y brindá una respuesta que los demás puedan darte para demostrar su apoyo. Por ejemplo, &amp;quot;Cuando digo/hago X, ¿ustedes podrían decir/hacer Y?&amp;quot;. Opcionalmente, convertilo en una asignación al decir que haremos X una cierta cantidad de veces al día, donde X es una actividad que requiere que vivamos nuestro alineamiento. &lt;br /&gt;
# Evidencia. Escribí, en términos específicos y medibles, la evidencia a largo plazo de practicar este alineamiento. &lt;br /&gt;
# Ayuda. Pedile ayuda a cada miembro del equipo. Ellos ayudan al dar la respuesta que te gustaría cuando des la señal de estar practicando tu alineamiento. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Identificar un alineamiento que resultarán en un cambio personal y que no requiere ningún cambio en otra personal. &lt;br /&gt;
* Identificar bloqueos y deseos que son específicos y personales. &lt;br /&gt;
* Identificar bloqueos que, si se resuelven, radicalmente van a incrementar tu efectividad en la vida, el trabajo y el ocio. &lt;br /&gt;
* Elegir una virtud que trata sobre vos y que sea, preferentemente, de una sola palabra. Por ejemplo: integridad, pasión, cuidado personal, paz, diversión. &lt;br /&gt;
* Pedir ayuda a las personas que te conozcan y/o conozcan tu alineamiento. &lt;br /&gt;
* Identificar evidencia que es medible por una tercera persona, objetiva. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Los alineamientos personales más comunes son &amp;quot;Quiero (integridad, coraje, pasión, paz, cuidado personal, conocimiento personal). &lt;br /&gt;
* Si te cuesta averiguar lo que querés, adoptá el alineamiento &amp;quot;conocimiento personal&amp;quot;. No hay ningún caso en el que aumentar el conocimiento personal no sea benéfico. &lt;br /&gt;
* Un bloqueo personal es algo que encontramos dentro nuestro. No se refiere a circunstancias ni a otras personas. Asumir que ya podríamos haber tenido lo que queremos, que nuestro bloqueo es un mito que de alguna manera nos está privando de nuestro potencial máximo.&lt;br /&gt;
* Idealmente, identificá evidencia inmediata y a largo plazo para tu alineamiento. Escribí los resultados que empiezan ahora (o muy pronto) y también los resultados que veremos en cinco o más años en el futuro.&lt;br /&gt;
* Como señal predeterminada, decile a tus compañeros u otras personas cercanas que estás trabajando en tu alineamiento cuando lo estás practicando. Si no conocen el protocolo, simplemente contales en qué virtud estás trabajando y pediles ayuda. &lt;br /&gt;
* Cuando los miembros del equipo están completando su alineamiento juntos (se piden ayuda entre ellos), el paso final del proceso es más poderoso si se hace como una ceremonia.&lt;br /&gt;
&lt;br /&gt;
=== Investigar ===&lt;br /&gt;
[[Investigar]] permite aprender sobre cierto fenónemo que ocurre en alguien. Usalo cuando la idea o comportamiento que alguien presenta parece ser pobre, confuso o simplemente interesante.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Actuá como si fueras un investigador independiente, pero fascinado, haciendo preguntas hasta que tu curiosidad este satisfecha o hasta que no quieras hacer más preguntas.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Realizar preguntas bien formadas.&lt;br /&gt;
* Realizar únicamente preguntas que aumentarán tu comprensión.&lt;br /&gt;
* Realizar preguntas sólo si el interrogado está comprometido y parece estar listo para responder más.&lt;br /&gt;
* Abstenerse de emitir opiniones.&lt;br /&gt;
* No realizar preguntas donde crees saber qué es lo que responderá.&lt;br /&gt;
* Si no puedes mantenerte como un investigador curioso e independiente, no siguas utilizando el protocolo hasta que puedas volver y mantener estos compromisos.&lt;br /&gt;
 &lt;br /&gt;
==== Notas ====&lt;br /&gt;
* No sacar teorias sobre el investigado ni dar diagnóstico alguno.&lt;br /&gt;
* Considerá utilizar los siguientes tipos de preguntas:&lt;br /&gt;
** ¿Que aspecto de X te generan Y Z?&lt;br /&gt;
** ¿Puedes darme un ejemplo específico?&lt;br /&gt;
** ¿Qué es lo que mas quieres de resolver X?&lt;br /&gt;
** ¿Cuál es el problema más grande que ves de X ahora?&lt;br /&gt;
** ¿Cuál es la cosa más importante que podés hacer ahora para ayudar con X?&lt;br /&gt;
* Las preguntas ineficientes incluyen las siguientes:&lt;br /&gt;
** Preguntas que lleven a una agenda de preguntas.&lt;br /&gt;
** Preguntas que intenten esconder una respuesta que tu crees verdadera.&lt;br /&gt;
** Preguntas que inviten a contar historias.&lt;br /&gt;
** Preguntas que comiencen con &amp;quot;Por qué&amp;quot;.&lt;br /&gt;
* Mantenerse en la intención de obtener mas información.&lt;br /&gt;
* Si sientes que vas a explotar si no podés decir lo que tenés en mente, no deberías hablar. Considerá utilizar [[Comprobación de intención]] o [[Check-Out]].&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Conformación de equipos]]&lt;br /&gt;
* [http://www.mccarthyshow.com/LearnForFree/BestPracticesTheCoreProtocols/tabid/65/Default.aspx Descargar The Core Protocols en PDF (inglés)]&lt;br /&gt;
&lt;br /&gt;
[[Category: The Core]]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=The_Core&amp;diff=3488</id>
		<title>The Core</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=The_Core&amp;diff=3488"/>
				<updated>2009-10-14T18:43:53Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Investigar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[The Core]] es un conjunto de protocolos y prácticas para la [[Conformación de equipos]] efectivos.&lt;br /&gt;
&lt;br /&gt;
== ¿Qué son los protocolos de The Core? ==&lt;br /&gt;
Los protocolos de The Core son &amp;quot;mejores prácticas&amp;quot; para las personas, equipos de personas y organizaciones que quieren obtener grandes resultados - todo el tiempo. Son &amp;quot;Core&amp;quot; (núcleo) porque son fundacionales - pueden ser usados por todos los equipos, en todo lugar, incluso si ya tienen patrones organizaciones y mejores prácticas propias. Son &amp;quot;protocolos&amp;quot; porque nombran y prescriben formas de interacción entre las personas (comportamiento), que resultan predecibles, como los &amp;quot;protocolos&amp;quot; que se usan en la diplomacia. &lt;br /&gt;
&lt;br /&gt;
Entonces, los protocolos de The Core: &lt;br /&gt;
* son tácticas que las personas pueden usar para obtener mejores resultados&lt;br /&gt;
* los pueden usar individuos, equipos y organizaciones&lt;br /&gt;
* son de &amp;quot;[[Software Libre]]&amp;quot; y &amp;quot;versionados&amp;quot; (se mejoran con el tiempo), al igual que el software&lt;br /&gt;
&lt;br /&gt;
Suena interesante, ¿no?&lt;br /&gt;
&lt;br /&gt;
A continuación dejamos una traducción de [http://www.mccarthyshow.com/LearnForFree/BestPracticesTheCoreProtocols/tabid/65/Default.aspx The Core Protocolos v 3.02]. &lt;br /&gt;
Pueden leer más sobre [[The Core]] en el libro '''Software for your head''', de Jim y Michele McCarthy (ISBN 0-201-60456-6).&lt;br /&gt;
&lt;br /&gt;
== Los protocolos de The Core v 3.02 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;'''(The Core está distribuido bajo la [http://www.gnu.org/licenses/gpl.txt licencia GNU -PL]. The Core se considera como el código fuente bajo esa licencia. Son libres de usar, distribuir este trabajo o cualquier derivado que hagan, siempre y cuando también distribuyan este documento fuente en forma completa, incluyendo este párrafo).'''&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Los compromisos de The Core ===&lt;br /&gt;
# Me comprometo a estar involucrado cuando estoy presente.&lt;br /&gt;
#* A conocer e informar&lt;br /&gt;
#** lo que quiero,&lt;br /&gt;
#** lo que pienso, y &lt;br /&gt;
#** lo que siento.&lt;br /&gt;
#* A siempre buscar ayuda efectiva.&lt;br /&gt;
#* A no ofrecer y negarme a aceptar transmiciones emocionales incoherentes.&lt;br /&gt;
#* Cuando tengo o escucho una mejor idea que la actual, inmediantamente voy a&lt;br /&gt;
#** proponerla para una aceptación decisiva o rechazo, y/o&lt;br /&gt;
#** explícitamente voy a buscar que se mejore&lt;br /&gt;
#* Personalmente voy a apoyar la mejor idea&lt;br /&gt;
#** sin importar de quien venga, &lt;br /&gt;
#** sin importar cuánto desee que aparezca otra mejor idea más tarde, y&lt;br /&gt;
#** cuando no tengo una idea alternativa superior.&lt;br /&gt;
# Voy a buscar percibir más de lo que busco ser percibido.&lt;br /&gt;
# Voy a usar los equipos, en especial cuando llevo adelante tareas difíciles.&lt;br /&gt;
# Voy a hablar siempre y sólo cuando creo que voy a mejorar el ratio general resultado/esfuerzo.&lt;br /&gt;
# Voy a ofrecer y aceptar sólo comportamiento y comunicación racional y orientada a resultados.&lt;br /&gt;
# Me voy a desinvolucrar de situaciones menos productivas&lt;br /&gt;
#* cuando no pueda mantener este compromiso&lt;br /&gt;
#* cuando es más importante que me involucre en otro lugar.&lt;br /&gt;
# Voy a hacer ahora lo que debe hacerse eventualmente y puede hacerse efectivamente ahora.&lt;br /&gt;
# Voy a buscar avanzar hacia un objetivo en particular, llevando mi comportamiento hacia la acción.&lt;br /&gt;
# Voy a usar los Protocolos de The Core (o mejores) cuando sea aplicable.&lt;br /&gt;
#* Voy a ofrecer y aceptar a tiempo y usar adecuadamente el Protocolo de [[Check-In]]&lt;br /&gt;
# No voy a lastimar -ni tolerar que lastimen- a nadie por su fidelidad a estos compromisos.&lt;br /&gt;
# No voy a hacer nada tonto a propósito.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pasar (Despasar) ===&lt;br /&gt;
El protocolo [[Pasar]] es para declinar la participación en algo. Usalo cada vez que no quieras participar en una actividad. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Cuando decidís no participar, decí &amp;quot;Paso&amp;quot;.&lt;br /&gt;
# Podés despasar en cualquier momento que quieras. Despasá ni bien sepas que querés participar otra vez, diciendo &amp;quot;Despaso&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Mantener privados los motivos de pasar.&lt;br /&gt;
* Pasar en algo ni bien somos conscientes de que vamos a pasar. &lt;br /&gt;
* Respetar el decho de los demás a pasar sin explicación.&lt;br /&gt;
* No juzgar, avergonazar, molestar, interrogar ni castigar a alguien que pasa. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* En general, no vas a estar bien parado frente a los Compromisos de The Core si pasás la mayor parte del tiempo.&lt;br /&gt;
* Podés pasar de cualquier actividad; sin embargo, si adoptás los Compromisos de The Core, no podés pasar en un voto de [[Decisión]] y tenés que decir &amp;quot;Estoy presente&amp;quot; al hacer el [[Check-In]].&lt;br /&gt;
* Podés pasar aunque ya hayas empezado algo. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check-In ===&lt;br /&gt;
Usá el [[Check-In]] para empezar reuniones o en cualquier momento que un Check-In individual o grupal agregue valor a las interacciones del equipo.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# La persona dice &amp;quot;Me siento [uno o más de ENOJADO, TRISTE, CONTENTO, ASUSTADO]&amp;quot;. La persona puede dar una breve explicación. O si otros ya hacieron su check-in, la persona puede decir &amp;quot;Paso&amp;quot;. (ver el protocolo [[Pasar]]).&lt;br /&gt;
# La persona dice &amp;quot;Estoy presente&amp;quot;. Esto significa que la persona se comportará de acuerdo a los Compromisos de The Core. &lt;br /&gt;
# El resto de las personas responden &amp;quot;Bienvenido&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Decir los sentimientos sin adjetivos.&lt;br /&gt;
* Decir los sentimientos sólo sin nos pertenecen.&lt;br /&gt;
* Estar callados durante el Check-In de otra persona.&lt;br /&gt;
* No referirse al Check-In de otra persona sin su permiso explícito para hacerlo.&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* En el contexto de los Protocolos de The Core, todas las emociones se expresan a través de una combinación de ENOJADO, TRISTE, CONTENTO o ASUSTADO. Por ejemplo, &amp;quot;ansioso&amp;quot; puede ser una combinación de CONTENTO y ASUSTADO.&lt;br /&gt;
* Hacer el Check-In lo más profundo posible. Lo normal es hacer el check-in con dos o más emociones. La profundidad del Check-In del grupo se traduce directamente en la calidad de los resultados del grupo.&lt;br /&gt;
* No hacer nada por disminuir el estado emocional. No describirnos como &amp;quot;un poquito&amp;quot; enojado, triste, contento o asustado, ni tampoco decir &amp;quot;Estoy enojado, PERO igual estoy contento&amp;quot;. &lt;br /&gt;
* Excepto en los grupos muy grandes, si más de una persona hace el check-in, es recomendable que todos lo hagan.&lt;br /&gt;
* FELIZ puede ser un sustito de CONTENTO, y CON MIEDO puede ser un sustitio de ASUSTADO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check-Out ===&lt;br /&gt;
El [[Check-Out]] requiere que nuestra presencia física siempre signifique nuestro involucramiento. Debemos hacer un Check-Out cuando somos conscientes que no podemos mantener los Compromisos de The Core o cuando es mejor para nosotros estar en otro lugar. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Decir &amp;quot;Hago un Check-Out&amp;quot;.&lt;br /&gt;
# Físicamente dejar al grupo hasta que estemos listos para hacer un nuevo Check-In.&lt;br /&gt;
# Opcionalmente, si lo sabemos y es relevante, podemos decir cuándo pensamos volver. &lt;br /&gt;
# Quienes están presentes al momento del Check-Out no deben seguir a la persona, preguntar o hablar sobre el Check-Out de la persona. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Retornar ni bien podamos seguir los Compromisos de The Core.&lt;br /&gt;
* Retonar y hacer un Check-In sin llamar la atención por nuestro retorno.&lt;br /&gt;
* No juzgar, avergonzar, molestar, interrogar o castigar a nadie que hace un Check-out. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Cuando hacemos un Check-Out hacerlo de la forma más calmada que sea posible, de manera de causar la menor interrupción posible a los demás.&lt;br /&gt;
* Hacer un Check-Out si nuestra estado emocional nos impide colaborar, si tenemos una recepción baja a nueva información, o si no sabemos lo que queremos.&lt;br /&gt;
* El Check-Out es admitir que no podemos contribuir en ese momento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pedir ayuda ===&lt;br /&gt;
El protocolo de [[Pedir ayuda]] nos permite hacer un uso eficiente de las habilidades y conocimientos de otros. Pedir ayuda es el acto que cataliza la [[Conexión]] y uan [[Visión compartida]]. Debemos usarlo continuamente, antes y durante la búsqueda de cualquier resultado. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Quien pide le pregunta a otro; &amp;quot;[Nombre de quien ayuda], ¿harías X?&amp;quot;.&lt;br /&gt;
# Quien pide expresa todas las cosas específicas o restricciones de la petición.&lt;br /&gt;
# Quien ayuda responde diciendo &amp;quot;Si&amp;quot; o &amp;quot;No&amp;quot;, u ofreciendo una forma alternativa de ayuda. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Siempre empezar el Protocolo de Pedir ayuda con la frase &amp;quot;¿harías....?&amp;quot;.&lt;br /&gt;
* Tener una comprensión clara de lo que queremos que haga quien nos ayuda, o si no tenemos en claro la ayuda que queremos, dejarlo en claro diciendo &amp;quot;No estoy seguro con qué necesito ayuda, ¿me ayudarías?&amp;quot;.&lt;br /&gt;
* Asumir que todos quienes ayudan están siempre disponibles, y confiar que cada uno de quienes ayudan aceptan la responsabilidad de decir &amp;quot;No&amp;quot;. &lt;br /&gt;
* Decir &amp;quot;No&amp;quot; cada vez que no querramos ayudar. &lt;br /&gt;
* Aceptar la respuesta &amp;quot;No&amp;quot; sin hacer preguntas ni un drama emocional.&lt;br /&gt;
* Ser receptivos de la ayuda ofrecida. &lt;br /&gt;
* Ofrecer nuestra mejor ayuda incluso aunque no sea lo que está esperando quien pide. &lt;br /&gt;
* Postponer el pedido de ayuda si no podemos estar completamente involucrados.&lt;br /&gt;
* Pedir más información si no tenemos en claro en qué consiste la ayuda que nos piden.&lt;br /&gt;
* No disculparse por pedir ayuda. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Es &amp;quot;barato&amp;quot; pedir ayuda. El peor resultado es un &amp;quot;No&amp;quot;, lo que nos deja ni más adelante ni más atrás de antes de pedir. En el mejor escenario, reducimos el tiempo para hacer una tarea y/o aprender. &lt;br /&gt;
* Quienes ayudan deben decir &amp;quot;No&amp;quot; si no están seguros de querer ayudar. No deben decir nada más después de negarse. &lt;br /&gt;
* No podemos &amp;quot;pedir demasiada ayuda&amp;quot; a una persona, a menos que explícitamente esa persona haya pedido que se respete un límite en particular. &lt;br /&gt;
* Si no comprendemos el valor de lo que se ofrece, o sentimos que no sería útil, o creemos que ya consideramos y rechazamos la idea anteriormente, usemos una postura curiosa en vez de rechazar automáticamente con un &amp;quot;pero...&amp;quot; (ver el protocolo [[Investigar]])&lt;br /&gt;
* Pedir cuando hay problemas quienes decir que esperamos demasiado tiempo para pedir ayuda. Debemos pedir ayuda cuando nos está yendo bien. &lt;br /&gt;
* El simple hecho de conectarnos con alguien, incluso cuando esta persona no sepa nada del tema, pueden ayudarnos a encontrar respuestas dentro de nosotros mismos, especialmente si le pedimos a esa persona que nos Investigue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comprobación de protocolo ===&lt;br /&gt;
Usar la Comprobación de protocolo cuando creemos que se está usando un protocolo de forma incorrecta, o cuando se está rompiendo uno de los Compromisos de The Core. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Decir &amp;quot;Comprobación de protocolo&amp;quot;.&lt;br /&gt;
# Si sabemos el uso correcto del protocolo, decirlo. Sino, [[Pedir ayuda]].&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Decir &amp;quot;Comprobación de protocolo&amp;quot; ni bien seamos conscientes del uso incorrecto de un protocolo, o si se viola alguno de los Compromisos de The Core. Hacerlo sin importar la actividad que se esté llevando a cabo.&lt;br /&gt;
* Apoyar a cualquiera que use la Comprobación de protocolo.&lt;br /&gt;
* No avergonzar ni castigar a nadie que use la Comprobación de protocolo.&lt;br /&gt;
* [[Pedir ayuda]] ni bien nos demos cuenta que no sabemos el uso correcto de un protocolo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comprobación de intención ===&lt;br /&gt;
Usar la [[Comprobación de intención]] para clarificar el propósito de nuestro comportamiento, o el de otros. Usarlo cuando no estamos esperando un resultado positvo del comportamiento actual. La [[Comprobación de intención]] verifica la integridad de la intención propia y de otros en un caso dado. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Preguntar &amp;quot;¿Cuál es mi/tu intención con X?&amp;quot;, donde X es algún tipo de comportamiento actual o pendiente de la persona cuya intención queremos conocer. &lt;br /&gt;
# Si resulta útil, preguntar &amp;quot;¿Qué respuesta o comportamiento querés de alguien como resultado de X?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Ser consciente de nuestra propia intención antes de comprobar la intención de otros.&lt;br /&gt;
* Investigar lo suficiente para descubrir la intención de la persona o de sus acciones.&lt;br /&gt;
* Asegurarse de tener la intención de resolver cualquier conflicto de manera pacífica antes de comprobar la intención de otra persona. Si no tenemos una intención pacífica, hacer un [[Check-Out]].&lt;br /&gt;
* No ser defensivos cuando alguien nos pregunta cuál es nuestra intención. Si no podemos, hacer un [[Check-Out]].&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Si aparece un conflicto que parece irresoluble, hacer un [[Check-Out]] o [[Pedir ayuda]].&lt;br /&gt;
&lt;br /&gt;
=== Decisión ===&lt;br /&gt;
Usar [[Decisión]] cada vez que querramos avanzar al equipo de forna inmediata y unánime hacia resultados.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# El proponente dice &amp;quot;Propongo [comportamiento consiso y accionable]&amp;quot;.&lt;br /&gt;
# El proponente dice &amp;quot;1-2-3&amp;quot;.&lt;br /&gt;
# Los votantes votan simultáneamente, usando un &amp;quot;Si&amp;quot; (pulgar arriba), &amp;quot;No&amp;quot; (pulgar abajo) o &amp;quot;Lo apoyo&amp;quot; (mano plana). &lt;br /&gt;
# Los votantes que no pueden aceptar la propuesta bajo ningún punto de vista deben expresarlo abiertamente diciendo &amp;quot;Mi voto es un no absoluto. No voy a apoyarlo&amp;quot;. Si esto ocurre, se retira la propuesta.&lt;br /&gt;
# El proponente cuenta los votos. &lt;br /&gt;
# El proponente retira la propuesta si la combinación de votos &amp;quot;No&amp;quot; y votos &amp;quot;Lo apoyo&amp;quot; es demasiado grande, o si el proponente no espera concluir con éxito la [[Resolución]] (ver a continuación). Podemos aproximar este &amp;quot;demasiado grande&amp;quot; usando la siguiente heurística: &lt;br /&gt;
#* aproximadamente el 50% (o más) de los votos son &amp;quot;Lo apoyo&amp;quot;, o&lt;br /&gt;
#* la ganancia esperada de la propuesta si fuera aprobada es menor que el costo por el esfuerzo de la [[Resolución]].&lt;br /&gt;
# El proponente usa el Protocolo de [[Resolución]] con cada votante &amp;quot;No&amp;quot; para acercarlo a la propuesta, preguntándole &amp;quot;¿Qué sería necesario para que aceptes?&amp;quot;.&lt;br /&gt;
# El proponente declara aceptada a la propuesta si todos los votos &amp;quot;No&amp;quot; cambian a &amp;quot;Si&amp;quot; o &amp;quot;Lo apoyo&amp;quot;. &lt;br /&gt;
# El equipo ahora está comprometido a la acción.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Proponer no más de un elemento por propuesta.&lt;br /&gt;
* Mantenerse presente hasta que esté terminado el protocolo de [[Decisión]]; siempre estar conscientes de cómo nuestro comportamiento afecta al equipo, haciendolo avanzar o poniendo obstáculos.&lt;br /&gt;
* Dar nuestra máxima atención a la propuesta por sobre cualquier otra actividad. &lt;br /&gt;
* Hablar sólo cuando se es el proponente, o cuando el proponente nos pide hablar. &lt;br /&gt;
* Durante el protocolo, no expresar los motivos por los cuales votamos como lo hicimos.&lt;br /&gt;
* Revelar inmediatamente cuando somos un votante &amp;quot;No absoluto&amp;quot;, y estar listos a proponer una mejor idea. &lt;br /&gt;
* Ser personalmente responsable por lograr los resultados del compromiso de la Decisión, incluso aunque haya sido hecha en nuestra ausencia. &lt;br /&gt;
* Mantenerse informados sobre los compromisos de una Decisión hechos en nuestra ausencia. &lt;br /&gt;
* No discutir con un votante &amp;quot;No absoluto&amp;quot;. Siempre pedirle una idea mejor.&lt;br /&gt;
* Apoyar activamente las decisiones tomadas. &lt;br /&gt;
* Usar la capacidad de &amp;quot;parar el carro&amp;quot; al decir &amp;quot;no me van a convencer sin importar qué pase&amp;quot; con mucha discresión y lo más infrecuentemente posible.&lt;br /&gt;
* Insitir todo el tiempo que se sigan los protocolos de [[Decisión]] y [[Resolución]] tal cual están prescriptos, sin importar cuántas veces nos encontremos insistiendo en esto. &lt;br /&gt;
* No [[Pasar]] durante una [[Decisión]].&lt;br /&gt;
* Trabajar incesantemente para avanzar; estar enfocados a la acción.&lt;br /&gt;
* No mirar cómo votan los demás para elegir nuestro voto.&lt;br /&gt;
* Evitar usar el protocolo de [[Decisión]] en grupos grandes. Dividir al grupo grande en pequeños subgrupos para tomar decisiones, y usar el grupo grande para informar el estado.&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Votar &amp;quot;No&amp;quot; sólo cuando realmente creemos que nuestra contribución para hacer avanzar al equipo después de detenerlo con nuestro voto supera ampliamente el (en general alto) costo que agregamos por votar &amp;quot;No&amp;quot;. &lt;br /&gt;
* Si no estamos seguros o confusos por la propuesta, apoyarla y buscar clarificación luego de que la propuesta esté resuelta. Si tenemos una propuesta alternativa después de recibir más información, podemos estar seguros que nuestro equipo apoyará la mejor idea (recordar los Compromisos de The Core). &lt;br /&gt;
* Votar &amp;quot;No&amp;quot; para hacer cambios menores a lo que de otra manera es una propuesta aceptable sólo detiene el avance del equipo y debería evitarse. En cambio, ofrecer una propuesta adicional después de aprobar la actual o, mejor aún, involucrarse en la implementación para asegurarnos que nuestra idea se lleva adelante. &lt;br /&gt;
* Retirar las propuestas débiles. Si una propuesta recibe menos del 70% (aproximado) de votos &amp;quot;Si&amp;quot;, es una propuesta débiles y el proponente debería retirarla. Sin embargo, esta decisión queda a criterio del proponente. &lt;br /&gt;
* Cada vez que votemos &amp;quot;No&amp;quot; pensar como si fueramos el único votante no. &lt;br /&gt;
* Votar &amp;quot;No absoluto&amp;quot; sólo cuando estemos convencidos de tener una contribución importante para hacer a la dirección o liderazgo del equipo, o cuando la integridad lo requiere absolutamente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Investigar ===&lt;br /&gt;
Investigar permite aprender sobre cierto fenónemo que ocurre en alguien. Usalo cuando la idea o comportamiento que alguien presenta aparenta ser pobre, confusa o simplemente interesante.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Actua como si fueras un investigador independiente, pero fascinado, haciendo preguntas hasta que tu curiosidad este satisfecha o hasta que no quieras hacer mas preguntas.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
&lt;br /&gt;
* Realizar preguntas bien formadas.&lt;br /&gt;
* Realizar preguntas que unicamente aumentaran tu comprensión.&lt;br /&gt;
* Realizar preguntas solo si el interrogado esta comprometido y parece estar listo para responder mas.&lt;br /&gt;
* Abstenerse a emitir opiniones.&lt;br /&gt;
* No realizar preguntas donde crees que sabes que es lo que responderá.&lt;br /&gt;
* Si no puedes mantenerte como un investigador curioso e independiente, no siguas utilizando el protocolo hasta que puedas volver y mantener estos compromisos.&lt;br /&gt;
 &lt;br /&gt;
==== Notas ====&lt;br /&gt;
 &lt;br /&gt;
* No sacar teorias sobre el investigado ni dar diagnostico alguno.&lt;br /&gt;
* Considera utilizar los siguientes tipos de preguntas:&lt;br /&gt;
** ¿Que aspecto de X hace que Y Z?&lt;br /&gt;
** ¿Puedes darme un ejemplo especifico?&lt;br /&gt;
** ¿Que es lo que mas quieres de resolver X?&lt;br /&gt;
** ¿Cual es el problema mas grande que ves de X ahora?&lt;br /&gt;
** ¿Cual es la cosa mas importante que puedes hacer ahora para ayudar con X?&lt;br /&gt;
* Las preguntas ineficientes incluyen las siguientes:&lt;br /&gt;
** Preguntas que lleven a una agenda de preguntas.&lt;br /&gt;
** Preguntas que intenten esconder una respuesta que tu crees verdadera.&lt;br /&gt;
** Preguntas que inviten a contar historias.&lt;br /&gt;
** Preguntas que comiencen con &amp;quot;Por que&amp;quot;.&lt;br /&gt;
* Mantenerse en la intención de obtener mas información&lt;br /&gt;
* Si sientes que vas a explotar si no puedes decir lo que tienes en mente, no debes hablar. Considera utilizar [[Comprobación de intención]] o [[Check-Out]].&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Conformación de equipos]]&lt;br /&gt;
* [http://www.mccarthyshow.com/LearnForFree/BestPracticesTheCoreProtocols/tabid/65/Default.aspx Descargar The Core Protocols en PDF (inglés)]&lt;br /&gt;
&lt;br /&gt;
[[Category: The Core]]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=The_Core&amp;diff=3487</id>
		<title>The Core</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=The_Core&amp;diff=3487"/>
				<updated>2009-10-14T18:43:07Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Comprobación de intención */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[The Core]] es un conjunto de protocolos y prácticas para la [[Conformación de equipos]] efectivos.&lt;br /&gt;
&lt;br /&gt;
== ¿Qué son los protocolos de The Core? ==&lt;br /&gt;
Los protocolos de The Core son &amp;quot;mejores prácticas&amp;quot; para las personas, equipos de personas y organizaciones que quieren obtener grandes resultados - todo el tiempo. Son &amp;quot;Core&amp;quot; (núcleo) porque son fundacionales - pueden ser usados por todos los equipos, en todo lugar, incluso si ya tienen patrones organizaciones y mejores prácticas propias. Son &amp;quot;protocolos&amp;quot; porque nombran y prescriben formas de interacción entre las personas (comportamiento), que resultan predecibles, como los &amp;quot;protocolos&amp;quot; que se usan en la diplomacia. &lt;br /&gt;
&lt;br /&gt;
Entonces, los protocolos de The Core: &lt;br /&gt;
* son tácticas que las personas pueden usar para obtener mejores resultados&lt;br /&gt;
* los pueden usar individuos, equipos y organizaciones&lt;br /&gt;
* son de &amp;quot;[[Software Libre]]&amp;quot; y &amp;quot;versionados&amp;quot; (se mejoran con el tiempo), al igual que el software&lt;br /&gt;
&lt;br /&gt;
Suena interesante, ¿no?&lt;br /&gt;
&lt;br /&gt;
A continuación dejamos una traducción de [http://www.mccarthyshow.com/LearnForFree/BestPracticesTheCoreProtocols/tabid/65/Default.aspx The Core Protocolos v 3.02]. &lt;br /&gt;
Pueden leer más sobre [[The Core]] en el libro '''Software for your head''', de Jim y Michele McCarthy (ISBN 0-201-60456-6).&lt;br /&gt;
&lt;br /&gt;
== Los protocolos de The Core v 3.02 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;'''(The Core está distribuido bajo la [http://www.gnu.org/licenses/gpl.txt licencia GNU -PL]. The Core se considera como el código fuente bajo esa licencia. Son libres de usar, distribuir este trabajo o cualquier derivado que hagan, siempre y cuando también distribuyan este documento fuente en forma completa, incluyendo este párrafo).'''&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Los compromisos de The Core ===&lt;br /&gt;
# Me comprometo a estar involucrado cuando estoy presente.&lt;br /&gt;
#* A conocer e informar&lt;br /&gt;
#** lo que quiero,&lt;br /&gt;
#** lo que pienso, y &lt;br /&gt;
#** lo que siento.&lt;br /&gt;
#* A siempre buscar ayuda efectiva.&lt;br /&gt;
#* A no ofrecer y negarme a aceptar transmiciones emocionales incoherentes.&lt;br /&gt;
#* Cuando tengo o escucho una mejor idea que la actual, inmediantamente voy a&lt;br /&gt;
#** proponerla para una aceptación decisiva o rechazo, y/o&lt;br /&gt;
#** explícitamente voy a buscar que se mejore&lt;br /&gt;
#* Personalmente voy a apoyar la mejor idea&lt;br /&gt;
#** sin importar de quien venga, &lt;br /&gt;
#** sin importar cuánto desee que aparezca otra mejor idea más tarde, y&lt;br /&gt;
#** cuando no tengo una idea alternativa superior.&lt;br /&gt;
# Voy a buscar percibir más de lo que busco ser percibido.&lt;br /&gt;
# Voy a usar los equipos, en especial cuando llevo adelante tareas difíciles.&lt;br /&gt;
# Voy a hablar siempre y sólo cuando creo que voy a mejorar el ratio general resultado/esfuerzo.&lt;br /&gt;
# Voy a ofrecer y aceptar sólo comportamiento y comunicación racional y orientada a resultados.&lt;br /&gt;
# Me voy a desinvolucrar de situaciones menos productivas&lt;br /&gt;
#* cuando no pueda mantener este compromiso&lt;br /&gt;
#* cuando es más importante que me involucre en otro lugar.&lt;br /&gt;
# Voy a hacer ahora lo que debe hacerse eventualmente y puede hacerse efectivamente ahora.&lt;br /&gt;
# Voy a buscar avanzar hacia un objetivo en particular, llevando mi comportamiento hacia la acción.&lt;br /&gt;
# Voy a usar los Protocolos de The Core (o mejores) cuando sea aplicable.&lt;br /&gt;
#* Voy a ofrecer y aceptar a tiempo y usar adecuadamente el Protocolo de [[Check-In]]&lt;br /&gt;
# No voy a lastimar -ni tolerar que lastimen- a nadie por su fidelidad a estos compromisos.&lt;br /&gt;
# No voy a hacer nada tonto a propósito.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pasar (Despasar) ===&lt;br /&gt;
El protocolo [[Pasar]] es para declinar la participación en algo. Usalo cada vez que no quieras participar en una actividad. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Cuando decidís no participar, decí &amp;quot;Paso&amp;quot;.&lt;br /&gt;
# Podés despasar en cualquier momento que quieras. Despasá ni bien sepas que querés participar otra vez, diciendo &amp;quot;Despaso&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Mantener privados los motivos de pasar.&lt;br /&gt;
* Pasar en algo ni bien somos conscientes de que vamos a pasar. &lt;br /&gt;
* Respetar el decho de los demás a pasar sin explicación.&lt;br /&gt;
* No juzgar, avergonazar, molestar, interrogar ni castigar a alguien que pasa. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* En general, no vas a estar bien parado frente a los Compromisos de The Core si pasás la mayor parte del tiempo.&lt;br /&gt;
* Podés pasar de cualquier actividad; sin embargo, si adoptás los Compromisos de The Core, no podés pasar en un voto de [[Decisión]] y tenés que decir &amp;quot;Estoy presente&amp;quot; al hacer el [[Check-In]].&lt;br /&gt;
* Podés pasar aunque ya hayas empezado algo. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check-In ===&lt;br /&gt;
Usá el [[Check-In]] para empezar reuniones o en cualquier momento que un Check-In individual o grupal agregue valor a las interacciones del equipo.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# La persona dice &amp;quot;Me siento [uno o más de ENOJADO, TRISTE, CONTENTO, ASUSTADO]&amp;quot;. La persona puede dar una breve explicación. O si otros ya hacieron su check-in, la persona puede decir &amp;quot;Paso&amp;quot;. (ver el protocolo [[Pasar]]).&lt;br /&gt;
# La persona dice &amp;quot;Estoy presente&amp;quot;. Esto significa que la persona se comportará de acuerdo a los Compromisos de The Core. &lt;br /&gt;
# El resto de las personas responden &amp;quot;Bienvenido&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Decir los sentimientos sin adjetivos.&lt;br /&gt;
* Decir los sentimientos sólo sin nos pertenecen.&lt;br /&gt;
* Estar callados durante el Check-In de otra persona.&lt;br /&gt;
* No referirse al Check-In de otra persona sin su permiso explícito para hacerlo.&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* En el contexto de los Protocolos de The Core, todas las emociones se expresan a través de una combinación de ENOJADO, TRISTE, CONTENTO o ASUSTADO. Por ejemplo, &amp;quot;ansioso&amp;quot; puede ser una combinación de CONTENTO y ASUSTADO.&lt;br /&gt;
* Hacer el Check-In lo más profundo posible. Lo normal es hacer el check-in con dos o más emociones. La profundidad del Check-In del grupo se traduce directamente en la calidad de los resultados del grupo.&lt;br /&gt;
* No hacer nada por disminuir el estado emocional. No describirnos como &amp;quot;un poquito&amp;quot; enojado, triste, contento o asustado, ni tampoco decir &amp;quot;Estoy enojado, PERO igual estoy contento&amp;quot;. &lt;br /&gt;
* Excepto en los grupos muy grandes, si más de una persona hace el check-in, es recomendable que todos lo hagan.&lt;br /&gt;
* FELIZ puede ser un sustito de CONTENTO, y CON MIEDO puede ser un sustitio de ASUSTADO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check-Out ===&lt;br /&gt;
El [[Check-Out]] requiere que nuestra presencia física siempre signifique nuestro involucramiento. Debemos hacer un Check-Out cuando somos conscientes que no podemos mantener los Compromisos de The Core o cuando es mejor para nosotros estar en otro lugar. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Decir &amp;quot;Hago un Check-Out&amp;quot;.&lt;br /&gt;
# Físicamente dejar al grupo hasta que estemos listos para hacer un nuevo Check-In.&lt;br /&gt;
# Opcionalmente, si lo sabemos y es relevante, podemos decir cuándo pensamos volver. &lt;br /&gt;
# Quienes están presentes al momento del Check-Out no deben seguir a la persona, preguntar o hablar sobre el Check-Out de la persona. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Retornar ni bien podamos seguir los Compromisos de The Core.&lt;br /&gt;
* Retonar y hacer un Check-In sin llamar la atención por nuestro retorno.&lt;br /&gt;
* No juzgar, avergonzar, molestar, interrogar o castigar a nadie que hace un Check-out. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Cuando hacemos un Check-Out hacerlo de la forma más calmada que sea posible, de manera de causar la menor interrupción posible a los demás.&lt;br /&gt;
* Hacer un Check-Out si nuestra estado emocional nos impide colaborar, si tenemos una recepción baja a nueva información, o si no sabemos lo que queremos.&lt;br /&gt;
* El Check-Out es admitir que no podemos contribuir en ese momento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pedir ayuda ===&lt;br /&gt;
El protocolo de [[Pedir ayuda]] nos permite hacer un uso eficiente de las habilidades y conocimientos de otros. Pedir ayuda es el acto que cataliza la [[Conexión]] y uan [[Visión compartida]]. Debemos usarlo continuamente, antes y durante la búsqueda de cualquier resultado. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Quien pide le pregunta a otro; &amp;quot;[Nombre de quien ayuda], ¿harías X?&amp;quot;.&lt;br /&gt;
# Quien pide expresa todas las cosas específicas o restricciones de la petición.&lt;br /&gt;
# Quien ayuda responde diciendo &amp;quot;Si&amp;quot; o &amp;quot;No&amp;quot;, u ofreciendo una forma alternativa de ayuda. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Siempre empezar el Protocolo de Pedir ayuda con la frase &amp;quot;¿harías....?&amp;quot;.&lt;br /&gt;
* Tener una comprensión clara de lo que queremos que haga quien nos ayuda, o si no tenemos en claro la ayuda que queremos, dejarlo en claro diciendo &amp;quot;No estoy seguro con qué necesito ayuda, ¿me ayudarías?&amp;quot;.&lt;br /&gt;
* Asumir que todos quienes ayudan están siempre disponibles, y confiar que cada uno de quienes ayudan aceptan la responsabilidad de decir &amp;quot;No&amp;quot;. &lt;br /&gt;
* Decir &amp;quot;No&amp;quot; cada vez que no querramos ayudar. &lt;br /&gt;
* Aceptar la respuesta &amp;quot;No&amp;quot; sin hacer preguntas ni un drama emocional.&lt;br /&gt;
* Ser receptivos de la ayuda ofrecida. &lt;br /&gt;
* Ofrecer nuestra mejor ayuda incluso aunque no sea lo que está esperando quien pide. &lt;br /&gt;
* Postponer el pedido de ayuda si no podemos estar completamente involucrados.&lt;br /&gt;
* Pedir más información si no tenemos en claro en qué consiste la ayuda que nos piden.&lt;br /&gt;
* No disculparse por pedir ayuda. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Es &amp;quot;barato&amp;quot; pedir ayuda. El peor resultado es un &amp;quot;No&amp;quot;, lo que nos deja ni más adelante ni más atrás de antes de pedir. En el mejor escenario, reducimos el tiempo para hacer una tarea y/o aprender. &lt;br /&gt;
* Quienes ayudan deben decir &amp;quot;No&amp;quot; si no están seguros de querer ayudar. No deben decir nada más después de negarse. &lt;br /&gt;
* No podemos &amp;quot;pedir demasiada ayuda&amp;quot; a una persona, a menos que explícitamente esa persona haya pedido que se respete un límite en particular. &lt;br /&gt;
* Si no comprendemos el valor de lo que se ofrece, o sentimos que no sería útil, o creemos que ya consideramos y rechazamos la idea anteriormente, usemos una postura curiosa en vez de rechazar automáticamente con un &amp;quot;pero...&amp;quot; (ver el protocolo [[Investigar]])&lt;br /&gt;
* Pedir cuando hay problemas quienes decir que esperamos demasiado tiempo para pedir ayuda. Debemos pedir ayuda cuando nos está yendo bien. &lt;br /&gt;
* El simple hecho de conectarnos con alguien, incluso cuando esta persona no sepa nada del tema, pueden ayudarnos a encontrar respuestas dentro de nosotros mismos, especialmente si le pedimos a esa persona que nos Investigue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comprobación de protocolo ===&lt;br /&gt;
Usar la Comprobación de protocolo cuando creemos que se está usando un protocolo de forma incorrecta, o cuando se está rompiendo uno de los Compromisos de The Core. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Decir &amp;quot;Comprobación de protocolo&amp;quot;.&lt;br /&gt;
# Si sabemos el uso correcto del protocolo, decirlo. Sino, [[Pedir ayuda]].&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Decir &amp;quot;Comprobación de protocolo&amp;quot; ni bien seamos conscientes del uso incorrecto de un protocolo, o si se viola alguno de los Compromisos de The Core. Hacerlo sin importar la actividad que se esté llevando a cabo.&lt;br /&gt;
* Apoyar a cualquiera que use la Comprobación de protocolo.&lt;br /&gt;
* No avergonzar ni castigar a nadie que use la Comprobación de protocolo.&lt;br /&gt;
* [[Pedir ayuda]] ni bien nos demos cuenta que no sabemos el uso correcto de un protocolo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comprobación de intención ===&lt;br /&gt;
Usar la [[Comprobación de intención]] para clarificar el propósito de nuestro comportamiento, o el de otros. Usarlo cuando no estamos esperando un resultado positvo del comportamiento actual. La [[Comprobación de intención]] verifica la integridad de la intención propia y de otros en un caso dado. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Preguntar &amp;quot;¿Cuál es mi/tu intención con X?&amp;quot;, donde X es algún tipo de comportamiento actual o pendiente de la persona cuya intención queremos conocer. &lt;br /&gt;
# Si resulta útil, preguntar &amp;quot;¿Qué respuesta o comportamiento querés de alguien como resultado de X?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Ser consciente de nuestra propia intención antes de comprobar la intención de otros.&lt;br /&gt;
* Investigar lo suficiente para descubrir la intención de la persona o de sus acciones.&lt;br /&gt;
* Asegurarse de tener la intención de resolver cualquier conflicto de manera pacífica antes de comprobar la intención de otra persona. Si no tenemos una intención pacífica, hacer un [[Check-Out]].&lt;br /&gt;
* No ser defensivos cuando alguien nos pregunta cuál es nuestra intención. Si no podemos, hacer un [[Check-Out]].&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Si aparece un conflicto que parece irresoluble, hacer un [[Check-Out]] o [[Pedir ayuda]].&lt;br /&gt;
&lt;br /&gt;
=== Decisión ===&lt;br /&gt;
Usar [[Decisión]] cada vez que querramos avanzar al equipo de forna inmediata y unánime hacia resultados.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# El proponente dice &amp;quot;Propongo [comportamiento consiso y accionable]&amp;quot;.&lt;br /&gt;
# El proponente dice &amp;quot;1-2-3&amp;quot;.&lt;br /&gt;
# Los votantes votan simultáneamente, usando un &amp;quot;Si&amp;quot; (pulgar arriba), &amp;quot;No&amp;quot; (pulgar abajo) o &amp;quot;Lo apoyo&amp;quot; (mano plana). &lt;br /&gt;
# Los votantes que no pueden aceptar la propuesta bajo ningún punto de vista deben expresarlo abiertamente diciendo &amp;quot;Mi voto es un no absoluto. No voy a apoyarlo&amp;quot;. Si esto ocurre, se retira la propuesta.&lt;br /&gt;
# El proponente cuenta los votos. &lt;br /&gt;
# El proponente retira la propuesta si la combinación de votos &amp;quot;No&amp;quot; y votos &amp;quot;Lo apoyo&amp;quot; es demasiado grande, o si el proponente no espera concluir con éxito la [[Resolución]] (ver a continuación). Podemos aproximar este &amp;quot;demasiado grande&amp;quot; usando la siguiente heurística: &lt;br /&gt;
#* aproximadamente el 50% (o más) de los votos son &amp;quot;Lo apoyo&amp;quot;, o&lt;br /&gt;
#* la ganancia esperada de la propuesta si fuera aprobada es menor que el costo por el esfuerzo de la [[Resolución]].&lt;br /&gt;
# El proponente usa el Protocolo de [[Resolución]] con cada votante &amp;quot;No&amp;quot; para acercarlo a la propuesta, preguntándole &amp;quot;¿Qué sería necesario para que aceptes?&amp;quot;.&lt;br /&gt;
# El proponente declara aceptada a la propuesta si todos los votos &amp;quot;No&amp;quot; cambian a &amp;quot;Si&amp;quot; o &amp;quot;Lo apoyo&amp;quot;. &lt;br /&gt;
# El equipo ahora está comprometido a la acción.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Proponer no más de un elemento por propuesta.&lt;br /&gt;
* Mantenerse presente hasta que esté terminado el protocolo de [[Decisión]]; siempre estar conscientes de cómo nuestro comportamiento afecta al equipo, haciendolo avanzar o poniendo obstáculos.&lt;br /&gt;
* Dar nuestra máxima atención a la propuesta por sobre cualquier otra actividad. &lt;br /&gt;
* Hablar sólo cuando se es el proponente, o cuando el proponente nos pide hablar. &lt;br /&gt;
* Durante el protocolo, no expresar los motivos por los cuales votamos como lo hicimos.&lt;br /&gt;
* Revelar inmediatamente cuando somos un votante &amp;quot;No absoluto&amp;quot;, y estar listos a proponer una mejor idea. &lt;br /&gt;
* Ser personalmente responsable por lograr los resultados del compromiso de la Decisión, incluso aunque haya sido hecha en nuestra ausencia. &lt;br /&gt;
* Mantenerse informados sobre los compromisos de una Decisión hechos en nuestra ausencia. &lt;br /&gt;
* No discutir con un votante &amp;quot;No absoluto&amp;quot;. Siempre pedirle una idea mejor.&lt;br /&gt;
* Apoyar activamente las decisiones tomadas. &lt;br /&gt;
* Usar la capacidad de &amp;quot;parar el carro&amp;quot; al decir &amp;quot;no me van a convencer sin importar qué pase&amp;quot; con mucha discresión y lo más infrecuentemente posible.&lt;br /&gt;
* Insitir todo el tiempo que se sigan los protocolos de [[Decisión]] y [[Resolución]] tal cual están prescriptos, sin importar cuántas veces nos encontremos insistiendo en esto. &lt;br /&gt;
* No [[Pasar]] durante una [[Decisión]].&lt;br /&gt;
* Trabajar incesantemente para avanzar; estar enfocados a la acción.&lt;br /&gt;
* No mirar cómo votan los demás para elegir nuestro voto.&lt;br /&gt;
* Evitar usar el protocolo de [[Decisión]] en grupos grandes. Dividir al grupo grande en pequeños subgrupos para tomar decisiones, y usar el grupo grande para informar el estado.&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Votar &amp;quot;No&amp;quot; sólo cuando realmente creemos que nuestra contribución para hacer avanzar al equipo después de detenerlo con nuestro voto supera ampliamente el (en general alto) costo que agregamos por votar &amp;quot;No&amp;quot;. &lt;br /&gt;
* Si no estamos seguros o confusos por la propuesta, apoyarla y buscar clarificación luego de que la propuesta esté resuelta. Si tenemos una propuesta alternativa después de recibir más información, podemos estar seguros que nuestro equipo apoyará la mejor idea (recordar los Compromisos de The Core). &lt;br /&gt;
* Votar &amp;quot;No&amp;quot; para hacer cambios menores a lo que de otra manera es una propuesta aceptable sólo detiene el avance del equipo y debería evitarse. En cambio, ofrecer una propuesta adicional después de aprobar la actual o, mejor aún, involucrarse en la implementación para asegurarnos que nuestra idea se lleva adelante. &lt;br /&gt;
* Retirar las propuestas débiles. Si una propuesta recibe menos del 70% (aproximado) de votos &amp;quot;Si&amp;quot;, es una propuesta débiles y el proponente debería retirarla. Sin embargo, esta decisión queda a criterio del proponente. &lt;br /&gt;
* Cada vez que votemos &amp;quot;No&amp;quot; pensar como si fueramos el único votante no. &lt;br /&gt;
* Votar &amp;quot;No absoluto&amp;quot; sólo cuando estemos convencidos de tener una contribución importante para hacer a la dirección o liderazgo del equipo, o cuando la integridad lo requiere absolutamente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Investigar ===&lt;br /&gt;
Investigar permite aprender sobre cierto fenónemo que ocurre en alguien. Usalo cuando la idea o comportamiento que alguien presenta aparenta ser pobre, confusa o simplemente interesante.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Actua como si fueras un investigador independiente, pero fascinado, haciendo preguntas hasta que tu curiosidad este satisfecha o hasta que no quieras hacer mas preguntas.&lt;br /&gt;
&lt;br /&gt;
==== COMPROMISOS ====&lt;br /&gt;
&lt;br /&gt;
* Realizar preguntas bien formadas.&lt;br /&gt;
* Realizar preguntas que unicamente aumentaran tu comprensión.&lt;br /&gt;
* Realizar preguntas solo si el interrogado esta comprometido y parece estar listo para responder mas.&lt;br /&gt;
* Abstenerse a emitir opiniones.&lt;br /&gt;
* No realizar preguntas donde crees que sabes que es lo que responderá.&lt;br /&gt;
* Si no puedes mantenerte como un investigador curioso e independiente, no siguas utilizando el protocolo hasta que puedas volver y mantener estos compromisos.&lt;br /&gt;
 &lt;br /&gt;
==== NOTAS ====&lt;br /&gt;
 &lt;br /&gt;
* No sacar teorias sobre el investigado ni dar diagnostico alguno.&lt;br /&gt;
* Considera utilizar los siguientes tipos de preguntas:&lt;br /&gt;
** ¿Que aspecto de X hace que Y Z?&lt;br /&gt;
** ¿Puedes darme un ejemplo especifico?&lt;br /&gt;
** ¿Que es lo que mas quieres de resolver X?&lt;br /&gt;
** ¿Cual es el problema mas grande que ves de X ahora?&lt;br /&gt;
** ¿Cual es la cosa mas importante que puedes hacer ahora para ayudar con X?&lt;br /&gt;
* Las preguntas ineficientes incluyen las siguientes:&lt;br /&gt;
** Preguntas que lleven a una agenda de preguntas.&lt;br /&gt;
** Preguntas que intenten esconder una respuesta que tu crees verdadera.&lt;br /&gt;
** Preguntas que inviten a contar historias.&lt;br /&gt;
** Preguntas que comiencen con &amp;quot;Por que&amp;quot;.&lt;br /&gt;
* Mantenerse en la intención de obtener mas información&lt;br /&gt;
* Si sientes que vas a explotar si no puedes decir lo que tienes en mente, no debes hablar. Considera chequear tus intenciones o utilizar [[Check-Out]].&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Conformación de equipos]]&lt;br /&gt;
* [http://www.mccarthyshow.com/LearnForFree/BestPracticesTheCoreProtocols/tabid/65/Default.aspx Descargar The Core Protocols en PDF (inglés)]&lt;br /&gt;
&lt;br /&gt;
[[Category: The Core]]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=The_Core&amp;diff=3486</id>
		<title>The Core</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=The_Core&amp;diff=3486"/>
				<updated>2009-10-14T18:42:37Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* PASOS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[The Core]] es un conjunto de protocolos y prácticas para la [[Conformación de equipos]] efectivos.&lt;br /&gt;
&lt;br /&gt;
== ¿Qué son los protocolos de The Core? ==&lt;br /&gt;
Los protocolos de The Core son &amp;quot;mejores prácticas&amp;quot; para las personas, equipos de personas y organizaciones que quieren obtener grandes resultados - todo el tiempo. Son &amp;quot;Core&amp;quot; (núcleo) porque son fundacionales - pueden ser usados por todos los equipos, en todo lugar, incluso si ya tienen patrones organizaciones y mejores prácticas propias. Son &amp;quot;protocolos&amp;quot; porque nombran y prescriben formas de interacción entre las personas (comportamiento), que resultan predecibles, como los &amp;quot;protocolos&amp;quot; que se usan en la diplomacia. &lt;br /&gt;
&lt;br /&gt;
Entonces, los protocolos de The Core: &lt;br /&gt;
* son tácticas que las personas pueden usar para obtener mejores resultados&lt;br /&gt;
* los pueden usar individuos, equipos y organizaciones&lt;br /&gt;
* son de &amp;quot;[[Software Libre]]&amp;quot; y &amp;quot;versionados&amp;quot; (se mejoran con el tiempo), al igual que el software&lt;br /&gt;
&lt;br /&gt;
Suena interesante, ¿no?&lt;br /&gt;
&lt;br /&gt;
A continuación dejamos una traducción de [http://www.mccarthyshow.com/LearnForFree/BestPracticesTheCoreProtocols/tabid/65/Default.aspx The Core Protocolos v 3.02]. &lt;br /&gt;
Pueden leer más sobre [[The Core]] en el libro '''Software for your head''', de Jim y Michele McCarthy (ISBN 0-201-60456-6).&lt;br /&gt;
&lt;br /&gt;
== Los protocolos de The Core v 3.02 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;'''(The Core está distribuido bajo la [http://www.gnu.org/licenses/gpl.txt licencia GNU -PL]. The Core se considera como el código fuente bajo esa licencia. Son libres de usar, distribuir este trabajo o cualquier derivado que hagan, siempre y cuando también distribuyan este documento fuente en forma completa, incluyendo este párrafo).'''&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Los compromisos de The Core ===&lt;br /&gt;
# Me comprometo a estar involucrado cuando estoy presente.&lt;br /&gt;
#* A conocer e informar&lt;br /&gt;
#** lo que quiero,&lt;br /&gt;
#** lo que pienso, y &lt;br /&gt;
#** lo que siento.&lt;br /&gt;
#* A siempre buscar ayuda efectiva.&lt;br /&gt;
#* A no ofrecer y negarme a aceptar transmiciones emocionales incoherentes.&lt;br /&gt;
#* Cuando tengo o escucho una mejor idea que la actual, inmediantamente voy a&lt;br /&gt;
#** proponerla para una aceptación decisiva o rechazo, y/o&lt;br /&gt;
#** explícitamente voy a buscar que se mejore&lt;br /&gt;
#* Personalmente voy a apoyar la mejor idea&lt;br /&gt;
#** sin importar de quien venga, &lt;br /&gt;
#** sin importar cuánto desee que aparezca otra mejor idea más tarde, y&lt;br /&gt;
#** cuando no tengo una idea alternativa superior.&lt;br /&gt;
# Voy a buscar percibir más de lo que busco ser percibido.&lt;br /&gt;
# Voy a usar los equipos, en especial cuando llevo adelante tareas difíciles.&lt;br /&gt;
# Voy a hablar siempre y sólo cuando creo que voy a mejorar el ratio general resultado/esfuerzo.&lt;br /&gt;
# Voy a ofrecer y aceptar sólo comportamiento y comunicación racional y orientada a resultados.&lt;br /&gt;
# Me voy a desinvolucrar de situaciones menos productivas&lt;br /&gt;
#* cuando no pueda mantener este compromiso&lt;br /&gt;
#* cuando es más importante que me involucre en otro lugar.&lt;br /&gt;
# Voy a hacer ahora lo que debe hacerse eventualmente y puede hacerse efectivamente ahora.&lt;br /&gt;
# Voy a buscar avanzar hacia un objetivo en particular, llevando mi comportamiento hacia la acción.&lt;br /&gt;
# Voy a usar los Protocolos de The Core (o mejores) cuando sea aplicable.&lt;br /&gt;
#* Voy a ofrecer y aceptar a tiempo y usar adecuadamente el Protocolo de [[Check-In]]&lt;br /&gt;
# No voy a lastimar -ni tolerar que lastimen- a nadie por su fidelidad a estos compromisos.&lt;br /&gt;
# No voy a hacer nada tonto a propósito.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pasar (Despasar) ===&lt;br /&gt;
El protocolo [[Pasar]] es para declinar la participación en algo. Usalo cada vez que no quieras participar en una actividad. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Cuando decidís no participar, decí &amp;quot;Paso&amp;quot;.&lt;br /&gt;
# Podés despasar en cualquier momento que quieras. Despasá ni bien sepas que querés participar otra vez, diciendo &amp;quot;Despaso&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Mantener privados los motivos de pasar.&lt;br /&gt;
* Pasar en algo ni bien somos conscientes de que vamos a pasar. &lt;br /&gt;
* Respetar el decho de los demás a pasar sin explicación.&lt;br /&gt;
* No juzgar, avergonazar, molestar, interrogar ni castigar a alguien que pasa. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* En general, no vas a estar bien parado frente a los Compromisos de The Core si pasás la mayor parte del tiempo.&lt;br /&gt;
* Podés pasar de cualquier actividad; sin embargo, si adoptás los Compromisos de The Core, no podés pasar en un voto de [[Decisión]] y tenés que decir &amp;quot;Estoy presente&amp;quot; al hacer el [[Check-In]].&lt;br /&gt;
* Podés pasar aunque ya hayas empezado algo. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check-In ===&lt;br /&gt;
Usá el [[Check-In]] para empezar reuniones o en cualquier momento que un Check-In individual o grupal agregue valor a las interacciones del equipo.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# La persona dice &amp;quot;Me siento [uno o más de ENOJADO, TRISTE, CONTENTO, ASUSTADO]&amp;quot;. La persona puede dar una breve explicación. O si otros ya hacieron su check-in, la persona puede decir &amp;quot;Paso&amp;quot;. (ver el protocolo [[Pasar]]).&lt;br /&gt;
# La persona dice &amp;quot;Estoy presente&amp;quot;. Esto significa que la persona se comportará de acuerdo a los Compromisos de The Core. &lt;br /&gt;
# El resto de las personas responden &amp;quot;Bienvenido&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Decir los sentimientos sin adjetivos.&lt;br /&gt;
* Decir los sentimientos sólo sin nos pertenecen.&lt;br /&gt;
* Estar callados durante el Check-In de otra persona.&lt;br /&gt;
* No referirse al Check-In de otra persona sin su permiso explícito para hacerlo.&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* En el contexto de los Protocolos de The Core, todas las emociones se expresan a través de una combinación de ENOJADO, TRISTE, CONTENTO o ASUSTADO. Por ejemplo, &amp;quot;ansioso&amp;quot; puede ser una combinación de CONTENTO y ASUSTADO.&lt;br /&gt;
* Hacer el Check-In lo más profundo posible. Lo normal es hacer el check-in con dos o más emociones. La profundidad del Check-In del grupo se traduce directamente en la calidad de los resultados del grupo.&lt;br /&gt;
* No hacer nada por disminuir el estado emocional. No describirnos como &amp;quot;un poquito&amp;quot; enojado, triste, contento o asustado, ni tampoco decir &amp;quot;Estoy enojado, PERO igual estoy contento&amp;quot;. &lt;br /&gt;
* Excepto en los grupos muy grandes, si más de una persona hace el check-in, es recomendable que todos lo hagan.&lt;br /&gt;
* FELIZ puede ser un sustito de CONTENTO, y CON MIEDO puede ser un sustitio de ASUSTADO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check-Out ===&lt;br /&gt;
El [[Check-Out]] requiere que nuestra presencia física siempre signifique nuestro involucramiento. Debemos hacer un Check-Out cuando somos conscientes que no podemos mantener los Compromisos de The Core o cuando es mejor para nosotros estar en otro lugar. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Decir &amp;quot;Hago un Check-Out&amp;quot;.&lt;br /&gt;
# Físicamente dejar al grupo hasta que estemos listos para hacer un nuevo Check-In.&lt;br /&gt;
# Opcionalmente, si lo sabemos y es relevante, podemos decir cuándo pensamos volver. &lt;br /&gt;
# Quienes están presentes al momento del Check-Out no deben seguir a la persona, preguntar o hablar sobre el Check-Out de la persona. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Retornar ni bien podamos seguir los Compromisos de The Core.&lt;br /&gt;
* Retonar y hacer un Check-In sin llamar la atención por nuestro retorno.&lt;br /&gt;
* No juzgar, avergonzar, molestar, interrogar o castigar a nadie que hace un Check-out. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Cuando hacemos un Check-Out hacerlo de la forma más calmada que sea posible, de manera de causar la menor interrupción posible a los demás.&lt;br /&gt;
* Hacer un Check-Out si nuestra estado emocional nos impide colaborar, si tenemos una recepción baja a nueva información, o si no sabemos lo que queremos.&lt;br /&gt;
* El Check-Out es admitir que no podemos contribuir en ese momento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pedir ayuda ===&lt;br /&gt;
El protocolo de [[Pedir ayuda]] nos permite hacer un uso eficiente de las habilidades y conocimientos de otros. Pedir ayuda es el acto que cataliza la [[Conexión]] y uan [[Visión compartida]]. Debemos usarlo continuamente, antes y durante la búsqueda de cualquier resultado. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Quien pide le pregunta a otro; &amp;quot;[Nombre de quien ayuda], ¿harías X?&amp;quot;.&lt;br /&gt;
# Quien pide expresa todas las cosas específicas o restricciones de la petición.&lt;br /&gt;
# Quien ayuda responde diciendo &amp;quot;Si&amp;quot; o &amp;quot;No&amp;quot;, u ofreciendo una forma alternativa de ayuda. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Siempre empezar el Protocolo de Pedir ayuda con la frase &amp;quot;¿harías....?&amp;quot;.&lt;br /&gt;
* Tener una comprensión clara de lo que queremos que haga quien nos ayuda, o si no tenemos en claro la ayuda que queremos, dejarlo en claro diciendo &amp;quot;No estoy seguro con qué necesito ayuda, ¿me ayudarías?&amp;quot;.&lt;br /&gt;
* Asumir que todos quienes ayudan están siempre disponibles, y confiar que cada uno de quienes ayudan aceptan la responsabilidad de decir &amp;quot;No&amp;quot;. &lt;br /&gt;
* Decir &amp;quot;No&amp;quot; cada vez que no querramos ayudar. &lt;br /&gt;
* Aceptar la respuesta &amp;quot;No&amp;quot; sin hacer preguntas ni un drama emocional.&lt;br /&gt;
* Ser receptivos de la ayuda ofrecida. &lt;br /&gt;
* Ofrecer nuestra mejor ayuda incluso aunque no sea lo que está esperando quien pide. &lt;br /&gt;
* Postponer el pedido de ayuda si no podemos estar completamente involucrados.&lt;br /&gt;
* Pedir más información si no tenemos en claro en qué consiste la ayuda que nos piden.&lt;br /&gt;
* No disculparse por pedir ayuda. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Es &amp;quot;barato&amp;quot; pedir ayuda. El peor resultado es un &amp;quot;No&amp;quot;, lo que nos deja ni más adelante ni más atrás de antes de pedir. En el mejor escenario, reducimos el tiempo para hacer una tarea y/o aprender. &lt;br /&gt;
* Quienes ayudan deben decir &amp;quot;No&amp;quot; si no están seguros de querer ayudar. No deben decir nada más después de negarse. &lt;br /&gt;
* No podemos &amp;quot;pedir demasiada ayuda&amp;quot; a una persona, a menos que explícitamente esa persona haya pedido que se respete un límite en particular. &lt;br /&gt;
* Si no comprendemos el valor de lo que se ofrece, o sentimos que no sería útil, o creemos que ya consideramos y rechazamos la idea anteriormente, usemos una postura curiosa en vez de rechazar automáticamente con un &amp;quot;pero...&amp;quot; (ver el protocolo [[Investigar]])&lt;br /&gt;
* Pedir cuando hay problemas quienes decir que esperamos demasiado tiempo para pedir ayuda. Debemos pedir ayuda cuando nos está yendo bien. &lt;br /&gt;
* El simple hecho de conectarnos con alguien, incluso cuando esta persona no sepa nada del tema, pueden ayudarnos a encontrar respuestas dentro de nosotros mismos, especialmente si le pedimos a esa persona que nos Investigue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comprobación de protocolo ===&lt;br /&gt;
Usar la Comprobación de protocolo cuando creemos que se está usando un protocolo de forma incorrecta, o cuando se está rompiendo uno de los Compromisos de The Core. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Decir &amp;quot;Comprobación de protocolo&amp;quot;.&lt;br /&gt;
# Si sabemos el uso correcto del protocolo, decirlo. Sino, [[Pedir ayuda]].&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Decir &amp;quot;Comprobación de protocolo&amp;quot; ni bien seamos conscientes del uso incorrecto de un protocolo, o si se viola alguno de los Compromisos de The Core. Hacerlo sin importar la actividad que se esté llevando a cabo.&lt;br /&gt;
* Apoyar a cualquiera que use la Comprobación de protocolo.&lt;br /&gt;
* No avergonzar ni castigar a nadie que use la Comprobación de protocolo.&lt;br /&gt;
* [[Pedir ayuda]] ni bien nos demos cuenta que no sabemos el uso correcto de un protocolo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comprobación de intención ===&lt;br /&gt;
Usar la [[Comprobación de intención]] para clarificar el propósito de nuestro comportamiento, o el de otros. Usarlo cuando no estamos esperando un resultado positvo del comportamiento actual. La [[Comprobación de intención]] verifica la integridad de la intención propia y de otros en un caso dado. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Preguntar &amp;quot;¿Cuál es mi/tu intención con X?&amp;quot;, donde X es algún tipo de comportamiento actual o pendiente de la persona cuya intención queremos conocer. &lt;br /&gt;
# Si resulta útil, preguntar &amp;quot;¿Qué respuesta o comportamiento querés de alguien como resultado de X?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Ser consciente de nuestra propia intención antes de comprobar la intención de otros.&lt;br /&gt;
* Investigar lo suficiente para descubrir la intención de la persona o de sus acciones.&lt;br /&gt;
* Asegurarse de tener la intención de resolver cualquier conflicto de manera pacífica antes de comprobar la intención de otra persona. Si no tenemos una intención pacífica, hacer un [[Check-Out]].&lt;br /&gt;
* No ser defensivos cuando alguien nos pregunta cuál es nuestra intención. Si no podemos, hacer un [[Check-Out]].&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Si aparece un conflicto que parece irresoluble, hacer un [[Check-Out]] o [[Pedir ayuda]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Decisión ===&lt;br /&gt;
Usar [[Decisión]] cada vez que querramos avanzar al equipo de forna inmediata y unánime hacia resultados.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# El proponente dice &amp;quot;Propongo [comportamiento consiso y accionable]&amp;quot;.&lt;br /&gt;
# El proponente dice &amp;quot;1-2-3&amp;quot;.&lt;br /&gt;
# Los votantes votan simultáneamente, usando un &amp;quot;Si&amp;quot; (pulgar arriba), &amp;quot;No&amp;quot; (pulgar abajo) o &amp;quot;Lo apoyo&amp;quot; (mano plana). &lt;br /&gt;
# Los votantes que no pueden aceptar la propuesta bajo ningún punto de vista deben expresarlo abiertamente diciendo &amp;quot;Mi voto es un no absoluto. No voy a apoyarlo&amp;quot;. Si esto ocurre, se retira la propuesta.&lt;br /&gt;
# El proponente cuenta los votos. &lt;br /&gt;
# El proponente retira la propuesta si la combinación de votos &amp;quot;No&amp;quot; y votos &amp;quot;Lo apoyo&amp;quot; es demasiado grande, o si el proponente no espera concluir con éxito la [[Resolución]] (ver a continuación). Podemos aproximar este &amp;quot;demasiado grande&amp;quot; usando la siguiente heurística: &lt;br /&gt;
#* aproximadamente el 50% (o más) de los votos son &amp;quot;Lo apoyo&amp;quot;, o&lt;br /&gt;
#* la ganancia esperada de la propuesta si fuera aprobada es menor que el costo por el esfuerzo de la [[Resolución]].&lt;br /&gt;
# El proponente usa el Protocolo de [[Resolución]] con cada votante &amp;quot;No&amp;quot; para acercarlo a la propuesta, preguntándole &amp;quot;¿Qué sería necesario para que aceptes?&amp;quot;.&lt;br /&gt;
# El proponente declara aceptada a la propuesta si todos los votos &amp;quot;No&amp;quot; cambian a &amp;quot;Si&amp;quot; o &amp;quot;Lo apoyo&amp;quot;. &lt;br /&gt;
# El equipo ahora está comprometido a la acción.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Proponer no más de un elemento por propuesta.&lt;br /&gt;
* Mantenerse presente hasta que esté terminado el protocolo de [[Decisión]]; siempre estar conscientes de cómo nuestro comportamiento afecta al equipo, haciendolo avanzar o poniendo obstáculos.&lt;br /&gt;
* Dar nuestra máxima atención a la propuesta por sobre cualquier otra actividad. &lt;br /&gt;
* Hablar sólo cuando se es el proponente, o cuando el proponente nos pide hablar. &lt;br /&gt;
* Durante el protocolo, no expresar los motivos por los cuales votamos como lo hicimos.&lt;br /&gt;
* Revelar inmediatamente cuando somos un votante &amp;quot;No absoluto&amp;quot;, y estar listos a proponer una mejor idea. &lt;br /&gt;
* Ser personalmente responsable por lograr los resultados del compromiso de la Decisión, incluso aunque haya sido hecha en nuestra ausencia. &lt;br /&gt;
* Mantenerse informados sobre los compromisos de una Decisión hechos en nuestra ausencia. &lt;br /&gt;
* No discutir con un votante &amp;quot;No absoluto&amp;quot;. Siempre pedirle una idea mejor.&lt;br /&gt;
* Apoyar activamente las decisiones tomadas. &lt;br /&gt;
* Usar la capacidad de &amp;quot;parar el carro&amp;quot; al decir &amp;quot;no me van a convencer sin importar qué pase&amp;quot; con mucha discresión y lo más infrecuentemente posible.&lt;br /&gt;
* Insitir todo el tiempo que se sigan los protocolos de [[Decisión]] y [[Resolución]] tal cual están prescriptos, sin importar cuántas veces nos encontremos insistiendo en esto. &lt;br /&gt;
* No [[Pasar]] durante una [[Decisión]].&lt;br /&gt;
* Trabajar incesantemente para avanzar; estar enfocados a la acción.&lt;br /&gt;
* No mirar cómo votan los demás para elegir nuestro voto.&lt;br /&gt;
* Evitar usar el protocolo de [[Decisión]] en grupos grandes. Dividir al grupo grande en pequeños subgrupos para tomar decisiones, y usar el grupo grande para informar el estado.&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Votar &amp;quot;No&amp;quot; sólo cuando realmente creemos que nuestra contribución para hacer avanzar al equipo después de detenerlo con nuestro voto supera ampliamente el (en general alto) costo que agregamos por votar &amp;quot;No&amp;quot;. &lt;br /&gt;
* Si no estamos seguros o confusos por la propuesta, apoyarla y buscar clarificación luego de que la propuesta esté resuelta. Si tenemos una propuesta alternativa después de recibir más información, podemos estar seguros que nuestro equipo apoyará la mejor idea (recordar los Compromisos de The Core). &lt;br /&gt;
* Votar &amp;quot;No&amp;quot; para hacer cambios menores a lo que de otra manera es una propuesta aceptable sólo detiene el avance del equipo y debería evitarse. En cambio, ofrecer una propuesta adicional después de aprobar la actual o, mejor aún, involucrarse en la implementación para asegurarnos que nuestra idea se lleva adelante. &lt;br /&gt;
* Retirar las propuestas débiles. Si una propuesta recibe menos del 70% (aproximado) de votos &amp;quot;Si&amp;quot;, es una propuesta débiles y el proponente debería retirarla. Sin embargo, esta decisión queda a criterio del proponente. &lt;br /&gt;
* Cada vez que votemos &amp;quot;No&amp;quot; pensar como si fueramos el único votante no. &lt;br /&gt;
* Votar &amp;quot;No absoluto&amp;quot; sólo cuando estemos convencidos de tener una contribución importante para hacer a la dirección o liderazgo del equipo, o cuando la integridad lo requiere absolutamente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Investigar ===&lt;br /&gt;
Investigar permite aprender sobre cierto fenónemo que ocurre en alguien. Usalo cuando la idea o comportamiento que alguien presenta aparenta ser pobre, confusa o simplemente interesante.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Actua como si fueras un investigador independiente, pero fascinado, haciendo preguntas hasta que tu curiosidad este satisfecha o hasta que no quieras hacer mas preguntas.&lt;br /&gt;
&lt;br /&gt;
==== COMPROMISOS ====&lt;br /&gt;
&lt;br /&gt;
* Realizar preguntas bien formadas.&lt;br /&gt;
* Realizar preguntas que unicamente aumentaran tu comprensión.&lt;br /&gt;
* Realizar preguntas solo si el interrogado esta comprometido y parece estar listo para responder mas.&lt;br /&gt;
* Abstenerse a emitir opiniones.&lt;br /&gt;
* No realizar preguntas donde crees que sabes que es lo que responderá.&lt;br /&gt;
* Si no puedes mantenerte como un investigador curioso e independiente, no siguas utilizando el protocolo hasta que puedas volver y mantener estos compromisos.&lt;br /&gt;
 &lt;br /&gt;
==== NOTAS ====&lt;br /&gt;
 &lt;br /&gt;
* No sacar teorias sobre el investigado ni dar diagnostico alguno.&lt;br /&gt;
* Considera utilizar los siguientes tipos de preguntas:&lt;br /&gt;
** ¿Que aspecto de X hace que Y Z?&lt;br /&gt;
** ¿Puedes darme un ejemplo especifico?&lt;br /&gt;
** ¿Que es lo que mas quieres de resolver X?&lt;br /&gt;
** ¿Cual es el problema mas grande que ves de X ahora?&lt;br /&gt;
** ¿Cual es la cosa mas importante que puedes hacer ahora para ayudar con X?&lt;br /&gt;
* Las preguntas ineficientes incluyen las siguientes:&lt;br /&gt;
** Preguntas que lleven a una agenda de preguntas.&lt;br /&gt;
** Preguntas que intenten esconder una respuesta que tu crees verdadera.&lt;br /&gt;
** Preguntas que inviten a contar historias.&lt;br /&gt;
** Preguntas que comiencen con &amp;quot;Por que&amp;quot;.&lt;br /&gt;
* Mantenerse en la intención de obtener mas información&lt;br /&gt;
* Si sientes que vas a explotar si no puedes decir lo que tienes en mente, no debes hablar. Considera chequear tus intenciones o utilizar [[Check-Out]].&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Conformación de equipos]]&lt;br /&gt;
* [http://www.mccarthyshow.com/LearnForFree/BestPracticesTheCoreProtocols/tabid/65/Default.aspx Descargar The Core Protocols en PDF (inglés)]&lt;br /&gt;
&lt;br /&gt;
[[Category: The Core]]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=The_Core&amp;diff=3485</id>
		<title>The Core</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=The_Core&amp;diff=3485"/>
				<updated>2009-10-14T18:41:48Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* NOTAS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[The Core]] es un conjunto de protocolos y prácticas para la [[Conformación de equipos]] efectivos.&lt;br /&gt;
&lt;br /&gt;
== ¿Qué son los protocolos de The Core? ==&lt;br /&gt;
Los protocolos de The Core son &amp;quot;mejores prácticas&amp;quot; para las personas, equipos de personas y organizaciones que quieren obtener grandes resultados - todo el tiempo. Son &amp;quot;Core&amp;quot; (núcleo) porque son fundacionales - pueden ser usados por todos los equipos, en todo lugar, incluso si ya tienen patrones organizaciones y mejores prácticas propias. Son &amp;quot;protocolos&amp;quot; porque nombran y prescriben formas de interacción entre las personas (comportamiento), que resultan predecibles, como los &amp;quot;protocolos&amp;quot; que se usan en la diplomacia. &lt;br /&gt;
&lt;br /&gt;
Entonces, los protocolos de The Core: &lt;br /&gt;
* son tácticas que las personas pueden usar para obtener mejores resultados&lt;br /&gt;
* los pueden usar individuos, equipos y organizaciones&lt;br /&gt;
* son de &amp;quot;[[Software Libre]]&amp;quot; y &amp;quot;versionados&amp;quot; (se mejoran con el tiempo), al igual que el software&lt;br /&gt;
&lt;br /&gt;
Suena interesante, ¿no?&lt;br /&gt;
&lt;br /&gt;
A continuación dejamos una traducción de [http://www.mccarthyshow.com/LearnForFree/BestPracticesTheCoreProtocols/tabid/65/Default.aspx The Core Protocolos v 3.02]. &lt;br /&gt;
Pueden leer más sobre [[The Core]] en el libro '''Software for your head''', de Jim y Michele McCarthy (ISBN 0-201-60456-6).&lt;br /&gt;
&lt;br /&gt;
== Los protocolos de The Core v 3.02 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;'''(The Core está distribuido bajo la [http://www.gnu.org/licenses/gpl.txt licencia GNU -PL]. The Core se considera como el código fuente bajo esa licencia. Son libres de usar, distribuir este trabajo o cualquier derivado que hagan, siempre y cuando también distribuyan este documento fuente en forma completa, incluyendo este párrafo).'''&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Los compromisos de The Core ===&lt;br /&gt;
# Me comprometo a estar involucrado cuando estoy presente.&lt;br /&gt;
#* A conocer e informar&lt;br /&gt;
#** lo que quiero,&lt;br /&gt;
#** lo que pienso, y &lt;br /&gt;
#** lo que siento.&lt;br /&gt;
#* A siempre buscar ayuda efectiva.&lt;br /&gt;
#* A no ofrecer y negarme a aceptar transmiciones emocionales incoherentes.&lt;br /&gt;
#* Cuando tengo o escucho una mejor idea que la actual, inmediantamente voy a&lt;br /&gt;
#** proponerla para una aceptación decisiva o rechazo, y/o&lt;br /&gt;
#** explícitamente voy a buscar que se mejore&lt;br /&gt;
#* Personalmente voy a apoyar la mejor idea&lt;br /&gt;
#** sin importar de quien venga, &lt;br /&gt;
#** sin importar cuánto desee que aparezca otra mejor idea más tarde, y&lt;br /&gt;
#** cuando no tengo una idea alternativa superior.&lt;br /&gt;
# Voy a buscar percibir más de lo que busco ser percibido.&lt;br /&gt;
# Voy a usar los equipos, en especial cuando llevo adelante tareas difíciles.&lt;br /&gt;
# Voy a hablar siempre y sólo cuando creo que voy a mejorar el ratio general resultado/esfuerzo.&lt;br /&gt;
# Voy a ofrecer y aceptar sólo comportamiento y comunicación racional y orientada a resultados.&lt;br /&gt;
# Me voy a desinvolucrar de situaciones menos productivas&lt;br /&gt;
#* cuando no pueda mantener este compromiso&lt;br /&gt;
#* cuando es más importante que me involucre en otro lugar.&lt;br /&gt;
# Voy a hacer ahora lo que debe hacerse eventualmente y puede hacerse efectivamente ahora.&lt;br /&gt;
# Voy a buscar avanzar hacia un objetivo en particular, llevando mi comportamiento hacia la acción.&lt;br /&gt;
# Voy a usar los Protocolos de The Core (o mejores) cuando sea aplicable.&lt;br /&gt;
#* Voy a ofrecer y aceptar a tiempo y usar adecuadamente el Protocolo de [[Check-In]]&lt;br /&gt;
# No voy a lastimar -ni tolerar que lastimen- a nadie por su fidelidad a estos compromisos.&lt;br /&gt;
# No voy a hacer nada tonto a propósito.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pasar (Despasar) ===&lt;br /&gt;
El protocolo [[Pasar]] es para declinar la participación en algo. Usalo cada vez que no quieras participar en una actividad. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Cuando decidís no participar, decí &amp;quot;Paso&amp;quot;.&lt;br /&gt;
# Podés despasar en cualquier momento que quieras. Despasá ni bien sepas que querés participar otra vez, diciendo &amp;quot;Despaso&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Mantener privados los motivos de pasar.&lt;br /&gt;
* Pasar en algo ni bien somos conscientes de que vamos a pasar. &lt;br /&gt;
* Respetar el decho de los demás a pasar sin explicación.&lt;br /&gt;
* No juzgar, avergonazar, molestar, interrogar ni castigar a alguien que pasa. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* En general, no vas a estar bien parado frente a los Compromisos de The Core si pasás la mayor parte del tiempo.&lt;br /&gt;
* Podés pasar de cualquier actividad; sin embargo, si adoptás los Compromisos de The Core, no podés pasar en un voto de [[Decisión]] y tenés que decir &amp;quot;Estoy presente&amp;quot; al hacer el [[Check-In]].&lt;br /&gt;
* Podés pasar aunque ya hayas empezado algo. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check-In ===&lt;br /&gt;
Usá el [[Check-In]] para empezar reuniones o en cualquier momento que un Check-In individual o grupal agregue valor a las interacciones del equipo.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# La persona dice &amp;quot;Me siento [uno o más de ENOJADO, TRISTE, CONTENTO, ASUSTADO]&amp;quot;. La persona puede dar una breve explicación. O si otros ya hacieron su check-in, la persona puede decir &amp;quot;Paso&amp;quot;. (ver el protocolo [[Pasar]]).&lt;br /&gt;
# La persona dice &amp;quot;Estoy presente&amp;quot;. Esto significa que la persona se comportará de acuerdo a los Compromisos de The Core. &lt;br /&gt;
# El resto de las personas responden &amp;quot;Bienvenido&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Decir los sentimientos sin adjetivos.&lt;br /&gt;
* Decir los sentimientos sólo sin nos pertenecen.&lt;br /&gt;
* Estar callados durante el Check-In de otra persona.&lt;br /&gt;
* No referirse al Check-In de otra persona sin su permiso explícito para hacerlo.&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* En el contexto de los Protocolos de The Core, todas las emociones se expresan a través de una combinación de ENOJADO, TRISTE, CONTENTO o ASUSTADO. Por ejemplo, &amp;quot;ansioso&amp;quot; puede ser una combinación de CONTENTO y ASUSTADO.&lt;br /&gt;
* Hacer el Check-In lo más profundo posible. Lo normal es hacer el check-in con dos o más emociones. La profundidad del Check-In del grupo se traduce directamente en la calidad de los resultados del grupo.&lt;br /&gt;
* No hacer nada por disminuir el estado emocional. No describirnos como &amp;quot;un poquito&amp;quot; enojado, triste, contento o asustado, ni tampoco decir &amp;quot;Estoy enojado, PERO igual estoy contento&amp;quot;. &lt;br /&gt;
* Excepto en los grupos muy grandes, si más de una persona hace el check-in, es recomendable que todos lo hagan.&lt;br /&gt;
* FELIZ puede ser un sustito de CONTENTO, y CON MIEDO puede ser un sustitio de ASUSTADO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check-Out ===&lt;br /&gt;
El [[Check-Out]] requiere que nuestra presencia física siempre signifique nuestro involucramiento. Debemos hacer un Check-Out cuando somos conscientes que no podemos mantener los Compromisos de The Core o cuando es mejor para nosotros estar en otro lugar. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Decir &amp;quot;Hago un Check-Out&amp;quot;.&lt;br /&gt;
# Físicamente dejar al grupo hasta que estemos listos para hacer un nuevo Check-In.&lt;br /&gt;
# Opcionalmente, si lo sabemos y es relevante, podemos decir cuándo pensamos volver. &lt;br /&gt;
# Quienes están presentes al momento del Check-Out no deben seguir a la persona, preguntar o hablar sobre el Check-Out de la persona. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Retornar ni bien podamos seguir los Compromisos de The Core.&lt;br /&gt;
* Retonar y hacer un Check-In sin llamar la atención por nuestro retorno.&lt;br /&gt;
* No juzgar, avergonzar, molestar, interrogar o castigar a nadie que hace un Check-out. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Cuando hacemos un Check-Out hacerlo de la forma más calmada que sea posible, de manera de causar la menor interrupción posible a los demás.&lt;br /&gt;
* Hacer un Check-Out si nuestra estado emocional nos impide colaborar, si tenemos una recepción baja a nueva información, o si no sabemos lo que queremos.&lt;br /&gt;
* El Check-Out es admitir que no podemos contribuir en ese momento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pedir ayuda ===&lt;br /&gt;
El protocolo de [[Pedir ayuda]] nos permite hacer un uso eficiente de las habilidades y conocimientos de otros. Pedir ayuda es el acto que cataliza la [[Conexión]] y uan [[Visión compartida]]. Debemos usarlo continuamente, antes y durante la búsqueda de cualquier resultado. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Quien pide le pregunta a otro; &amp;quot;[Nombre de quien ayuda], ¿harías X?&amp;quot;.&lt;br /&gt;
# Quien pide expresa todas las cosas específicas o restricciones de la petición.&lt;br /&gt;
# Quien ayuda responde diciendo &amp;quot;Si&amp;quot; o &amp;quot;No&amp;quot;, u ofreciendo una forma alternativa de ayuda. &lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Siempre empezar el Protocolo de Pedir ayuda con la frase &amp;quot;¿harías....?&amp;quot;.&lt;br /&gt;
* Tener una comprensión clara de lo que queremos que haga quien nos ayuda, o si no tenemos en claro la ayuda que queremos, dejarlo en claro diciendo &amp;quot;No estoy seguro con qué necesito ayuda, ¿me ayudarías?&amp;quot;.&lt;br /&gt;
* Asumir que todos quienes ayudan están siempre disponibles, y confiar que cada uno de quienes ayudan aceptan la responsabilidad de decir &amp;quot;No&amp;quot;. &lt;br /&gt;
* Decir &amp;quot;No&amp;quot; cada vez que no querramos ayudar. &lt;br /&gt;
* Aceptar la respuesta &amp;quot;No&amp;quot; sin hacer preguntas ni un drama emocional.&lt;br /&gt;
* Ser receptivos de la ayuda ofrecida. &lt;br /&gt;
* Ofrecer nuestra mejor ayuda incluso aunque no sea lo que está esperando quien pide. &lt;br /&gt;
* Postponer el pedido de ayuda si no podemos estar completamente involucrados.&lt;br /&gt;
* Pedir más información si no tenemos en claro en qué consiste la ayuda que nos piden.&lt;br /&gt;
* No disculparse por pedir ayuda. &lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Es &amp;quot;barato&amp;quot; pedir ayuda. El peor resultado es un &amp;quot;No&amp;quot;, lo que nos deja ni más adelante ni más atrás de antes de pedir. En el mejor escenario, reducimos el tiempo para hacer una tarea y/o aprender. &lt;br /&gt;
* Quienes ayudan deben decir &amp;quot;No&amp;quot; si no están seguros de querer ayudar. No deben decir nada más después de negarse. &lt;br /&gt;
* No podemos &amp;quot;pedir demasiada ayuda&amp;quot; a una persona, a menos que explícitamente esa persona haya pedido que se respete un límite en particular. &lt;br /&gt;
* Si no comprendemos el valor de lo que se ofrece, o sentimos que no sería útil, o creemos que ya consideramos y rechazamos la idea anteriormente, usemos una postura curiosa en vez de rechazar automáticamente con un &amp;quot;pero...&amp;quot; (ver el protocolo [[Investigar]])&lt;br /&gt;
* Pedir cuando hay problemas quienes decir que esperamos demasiado tiempo para pedir ayuda. Debemos pedir ayuda cuando nos está yendo bien. &lt;br /&gt;
* El simple hecho de conectarnos con alguien, incluso cuando esta persona no sepa nada del tema, pueden ayudarnos a encontrar respuestas dentro de nosotros mismos, especialmente si le pedimos a esa persona que nos Investigue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comprobación de protocolo ===&lt;br /&gt;
Usar la Comprobación de protocolo cuando creemos que se está usando un protocolo de forma incorrecta, o cuando se está rompiendo uno de los Compromisos de The Core. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Decir &amp;quot;Comprobación de protocolo&amp;quot;.&lt;br /&gt;
# Si sabemos el uso correcto del protocolo, decirlo. Sino, [[Pedir ayuda]].&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Decir &amp;quot;Comprobación de protocolo&amp;quot; ni bien seamos conscientes del uso incorrecto de un protocolo, o si se viola alguno de los Compromisos de The Core. Hacerlo sin importar la actividad que se esté llevando a cabo.&lt;br /&gt;
* Apoyar a cualquiera que use la Comprobación de protocolo.&lt;br /&gt;
* No avergonzar ni castigar a nadie que use la Comprobación de protocolo.&lt;br /&gt;
* [[Pedir ayuda]] ni bien nos demos cuenta que no sabemos el uso correcto de un protocolo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Comprobación de intención ===&lt;br /&gt;
Usar la [[Comprobación de intención]] para clarificar el propósito de nuestro comportamiento, o el de otros. Usarlo cuando no estamos esperando un resultado positvo del comportamiento actual. La [[Comprobación de intención]] verifica la integridad de la intención propia y de otros en un caso dado. &lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# Preguntar &amp;quot;¿Cuál es mi/tu intención con X?&amp;quot;, donde X es algún tipo de comportamiento actual o pendiente de la persona cuya intención queremos conocer. &lt;br /&gt;
# Si resulta útil, preguntar &amp;quot;¿Qué respuesta o comportamiento querés de alguien como resultado de X?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Ser consciente de nuestra propia intención antes de comprobar la intención de otros.&lt;br /&gt;
* Investigar lo suficiente para descubrir la intención de la persona o de sus acciones.&lt;br /&gt;
* Asegurarse de tener la intención de resolver cualquier conflicto de manera pacífica antes de comprobar la intención de otra persona. Si no tenemos una intención pacífica, hacer un [[Check-Out]].&lt;br /&gt;
* No ser defensivos cuando alguien nos pregunta cuál es nuestra intención. Si no podemos, hacer un [[Check-Out]].&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Si aparece un conflicto que parece irresoluble, hacer un [[Check-Out]] o [[Pedir ayuda]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Decisión ===&lt;br /&gt;
Usar [[Decisión]] cada vez que querramos avanzar al equipo de forna inmediata y unánime hacia resultados.&lt;br /&gt;
&lt;br /&gt;
==== Pasos ====&lt;br /&gt;
# El proponente dice &amp;quot;Propongo [comportamiento consiso y accionable]&amp;quot;.&lt;br /&gt;
# El proponente dice &amp;quot;1-2-3&amp;quot;.&lt;br /&gt;
# Los votantes votan simultáneamente, usando un &amp;quot;Si&amp;quot; (pulgar arriba), &amp;quot;No&amp;quot; (pulgar abajo) o &amp;quot;Lo apoyo&amp;quot; (mano plana). &lt;br /&gt;
# Los votantes que no pueden aceptar la propuesta bajo ningún punto de vista deben expresarlo abiertamente diciendo &amp;quot;Mi voto es un no absoluto. No voy a apoyarlo&amp;quot;. Si esto ocurre, se retira la propuesta.&lt;br /&gt;
# El proponente cuenta los votos. &lt;br /&gt;
# El proponente retira la propuesta si la combinación de votos &amp;quot;No&amp;quot; y votos &amp;quot;Lo apoyo&amp;quot; es demasiado grande, o si el proponente no espera concluir con éxito la [[Resolución]] (ver a continuación). Podemos aproximar este &amp;quot;demasiado grande&amp;quot; usando la siguiente heurística: &lt;br /&gt;
#* aproximadamente el 50% (o más) de los votos son &amp;quot;Lo apoyo&amp;quot;, o&lt;br /&gt;
#* la ganancia esperada de la propuesta si fuera aprobada es menor que el costo por el esfuerzo de la [[Resolución]].&lt;br /&gt;
# El proponente usa el Protocolo de [[Resolución]] con cada votante &amp;quot;No&amp;quot; para acercarlo a la propuesta, preguntándole &amp;quot;¿Qué sería necesario para que aceptes?&amp;quot;.&lt;br /&gt;
# El proponente declara aceptada a la propuesta si todos los votos &amp;quot;No&amp;quot; cambian a &amp;quot;Si&amp;quot; o &amp;quot;Lo apoyo&amp;quot;. &lt;br /&gt;
# El equipo ahora está comprometido a la acción.&lt;br /&gt;
&lt;br /&gt;
==== Compromisos ====&lt;br /&gt;
* Proponer no más de un elemento por propuesta.&lt;br /&gt;
* Mantenerse presente hasta que esté terminado el protocolo de [[Decisión]]; siempre estar conscientes de cómo nuestro comportamiento afecta al equipo, haciendolo avanzar o poniendo obstáculos.&lt;br /&gt;
* Dar nuestra máxima atención a la propuesta por sobre cualquier otra actividad. &lt;br /&gt;
* Hablar sólo cuando se es el proponente, o cuando el proponente nos pide hablar. &lt;br /&gt;
* Durante el protocolo, no expresar los motivos por los cuales votamos como lo hicimos.&lt;br /&gt;
* Revelar inmediatamente cuando somos un votante &amp;quot;No absoluto&amp;quot;, y estar listos a proponer una mejor idea. &lt;br /&gt;
* Ser personalmente responsable por lograr los resultados del compromiso de la Decisión, incluso aunque haya sido hecha en nuestra ausencia. &lt;br /&gt;
* Mantenerse informados sobre los compromisos de una Decisión hechos en nuestra ausencia. &lt;br /&gt;
* No discutir con un votante &amp;quot;No absoluto&amp;quot;. Siempre pedirle una idea mejor.&lt;br /&gt;
* Apoyar activamente las decisiones tomadas. &lt;br /&gt;
* Usar la capacidad de &amp;quot;parar el carro&amp;quot; al decir &amp;quot;no me van a convencer sin importar qué pase&amp;quot; con mucha discresión y lo más infrecuentemente posible.&lt;br /&gt;
* Insitir todo el tiempo que se sigan los protocolos de [[Decisión]] y [[Resolución]] tal cual están prescriptos, sin importar cuántas veces nos encontremos insistiendo en esto. &lt;br /&gt;
* No [[Pasar]] durante una [[Decisión]].&lt;br /&gt;
* Trabajar incesantemente para avanzar; estar enfocados a la acción.&lt;br /&gt;
* No mirar cómo votan los demás para elegir nuestro voto.&lt;br /&gt;
* Evitar usar el protocolo de [[Decisión]] en grupos grandes. Dividir al grupo grande en pequeños subgrupos para tomar decisiones, y usar el grupo grande para informar el estado.&lt;br /&gt;
&lt;br /&gt;
==== Notas ====&lt;br /&gt;
* Votar &amp;quot;No&amp;quot; sólo cuando realmente creemos que nuestra contribución para hacer avanzar al equipo después de detenerlo con nuestro voto supera ampliamente el (en general alto) costo que agregamos por votar &amp;quot;No&amp;quot;. &lt;br /&gt;
* Si no estamos seguros o confusos por la propuesta, apoyarla y buscar clarificación luego de que la propuesta esté resuelta. Si tenemos una propuesta alternativa después de recibir más información, podemos estar seguros que nuestro equipo apoyará la mejor idea (recordar los Compromisos de The Core). &lt;br /&gt;
* Votar &amp;quot;No&amp;quot; para hacer cambios menores a lo que de otra manera es una propuesta aceptable sólo detiene el avance del equipo y debería evitarse. En cambio, ofrecer una propuesta adicional después de aprobar la actual o, mejor aún, involucrarse en la implementación para asegurarnos que nuestra idea se lleva adelante. &lt;br /&gt;
* Retirar las propuestas débiles. Si una propuesta recibe menos del 70% (aproximado) de votos &amp;quot;Si&amp;quot;, es una propuesta débiles y el proponente debería retirarla. Sin embargo, esta decisión queda a criterio del proponente. &lt;br /&gt;
* Cada vez que votemos &amp;quot;No&amp;quot; pensar como si fueramos el único votante no. &lt;br /&gt;
* Votar &amp;quot;No absoluto&amp;quot; sólo cuando estemos convencidos de tener una contribución importante para hacer a la dirección o liderazgo del equipo, o cuando la integridad lo requiere absolutamente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Investigar ===&lt;br /&gt;
Investigar permite aprender sobre cierto fenónemo que ocurre en alguien. Usalo cuando la idea o comportamiento que alguien presenta aparenta ser pobre, confusa o simplemente interesante.&lt;br /&gt;
&lt;br /&gt;
==== PASOS ====&lt;br /&gt;
# Actua como si fueras un investigador independiente, pero fascinado, haciendo preguntas hasta que tu curiosidad este satisfecha o hasta que no quieras hacer mas preguntas.&lt;br /&gt;
 &lt;br /&gt;
==== COMPROMISOS ====&lt;br /&gt;
&lt;br /&gt;
* Realizar preguntas bien formadas.&lt;br /&gt;
* Realizar preguntas que unicamente aumentaran tu comprensión.&lt;br /&gt;
* Realizar preguntas solo si el interrogado esta comprometido y parece estar listo para responder mas.&lt;br /&gt;
* Abstenerse a emitir opiniones.&lt;br /&gt;
* No realizar preguntas donde crees que sabes que es lo que responderá.&lt;br /&gt;
* Si no puedes mantenerte como un investigador curioso e independiente, no siguas utilizando el protocolo hasta que puedas volver y mantener estos compromisos.&lt;br /&gt;
 &lt;br /&gt;
==== NOTAS ====&lt;br /&gt;
 &lt;br /&gt;
* No sacar teorias sobre el investigado ni dar diagnostico alguno.&lt;br /&gt;
* Considera utilizar los siguientes tipos de preguntas:&lt;br /&gt;
** ¿Que aspecto de X hace que Y Z?&lt;br /&gt;
** ¿Puedes darme un ejemplo especifico?&lt;br /&gt;
** ¿Que es lo que mas quieres de resolver X?&lt;br /&gt;
** ¿Cual es el problema mas grande que ves de X ahora?&lt;br /&gt;
** ¿Cual es la cosa mas importante que puedes hacer ahora para ayudar con X?&lt;br /&gt;
* Las preguntas ineficientes incluyen las siguientes:&lt;br /&gt;
** Preguntas que lleven a una agenda de preguntas.&lt;br /&gt;
** Preguntas que intenten esconder una respuesta que tu crees verdadera.&lt;br /&gt;
** Preguntas que inviten a contar historias.&lt;br /&gt;
** Preguntas que comiencen con &amp;quot;Por que&amp;quot;.&lt;br /&gt;
* Mantenerse en la intención de obtener mas información&lt;br /&gt;
* Si sientes que vas a explotar si no puedes decir lo que tienes en mente, no debes hablar. Considera chequear tus intenciones o utilizar [[Check-Out]].&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Conformación de equipos]]&lt;br /&gt;
* [http://www.mccarthyshow.com/LearnForFree/BestPracticesTheCoreProtocols/tabid/65/Default.aspx Descargar The Core Protocols en PDF (inglés)]&lt;br /&gt;
&lt;br /&gt;
[[Category: The Core]]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1944</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1944"/>
				<updated>2009-02-25T13:03:46Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
              class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usar ids como identificadores de beans ==&lt;br /&gt;
&lt;br /&gt;
Se pueden especificar un name o un id como identificador de beans. Utilizar ids no incrementa la legibilidad, pero puede permitir que el parser XML valide las referencias de los beans. Si los ids no pueden ser utilizados debido a alguna restriccion XML IDREF, se pueden utilizar nombres como identificadores de beans. La restriccion XML IDREF dice que los ids deben comenzar con una letra (o alguno de los pocos caracteres de signo de puntuación permitidos en la especificación XML) seguido de letras, digitos, guiones, guiones bajos, dos puntos, o punto. Es muy raro que en algun proyecto tengamos un problema con algun nombre por no cumplir con estas restricciones.&lt;br /&gt;
&lt;br /&gt;
== Usar dependency-check durante la fase de desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se puede asignar al atributo dependency-check en la definicion de un bean un valor destinto del default '''none''', como ser: '''simple''', '''objects''', o '''all'''. Con esto el contenedor puede realizar valiadciones de dependencias. Esto es util cuando todas las propiedades (o cierto grupo de propiedades) de un bean deben ser asignadas explicitamente (o por autowiring...pero ya dijimos lo malo de usar autowiring).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        dependency-check=&amp;quot;objects&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, el contendedor se asegurara que las propiedades de InvasorService que no sean primitivos o colecciones esten asignadas. Se puede configurar el chequeo de dependencias para que controle que todas las propiedades del bean esten asignadas, pero esto es necesario en raras ocasiones ya que puede que haya propiedades que no necesiten ser asignadas.&lt;br /&gt;
&lt;br /&gt;
== Agregar un descripcion en el encabezado de cada archivo de configuración ==&lt;br /&gt;
&lt;br /&gt;
Es preferible usar ids y nombres descriptivos en vez de utilizar comentarios en los archivos de configuración. Adicionalmente, es útil agregar un encabezado en los archivos de configuración, el cual englobe los beans definidos en el archivo. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&lt;br /&gt;
        Este archivo define los Invasores que&lt;br /&gt;
        atacaran los disintos planetas. Depende&lt;br /&gt;
        de RobotsServices.xml, el cual provee los&lt;br /&gt;
        servicios de los robots que cada invasor tiene&lt;br /&gt;
        asignado....&lt;br /&gt;
    &amp;lt;/description&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comunicar los cambios al equipo ==&lt;br /&gt;
&lt;br /&gt;
Cuando se esta refactorizando código Java, es necesario asegurarse de actualizar el archivo de configuración para que refleje los cambios realizados e informar estos cambios a los miembros del equipo. El archivo de configuración XML es parte del código y es una parte crítica de la aplicación. La mayoria de las veces es necesario leer tanto el archivo XML como el código java para comprender como funciona algun componente.&lt;br /&gt;
&lt;br /&gt;
== Utilizar inyección de dependencias por Setter en vez de por Constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring provee tres tipos de inyección de dependencias: inyección por constructor, por setter y por método. Usualmente solamente utilizamos las dos primera.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot; class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;robotService&amp;quot; class=&amp;quot;com.dosideas.spring.RobotService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotDAO&amp;quot; ref=&amp;quot;robotDAO&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, el bean '''invasorService''' usa inyección por constructor, mientras que el bean '''robotService''' usa inyección por setter. La inyección de dependencias por constructor garantiza que el bean no sera construido con un estado inválido, pero la inyección de dependencias por setters es mucho mas flexible, especialmente cuando la clase tiene muchas propiedades y la mayoria de ellas son opcionales.&lt;br /&gt;
&lt;br /&gt;
== No abusar de la inyección de dependencias ==&lt;br /&gt;
&lt;br /&gt;
El ApplicationContext de Spring puede crear los objetos java que sean necesarios, pero no todos los objetos deberian ser creados a travez del motor de inyección de dependencias. Como ejemplo, los objetos de dominio no deberian ser creados utilizando inyección de dependencia. Los archivos de configuración pueden sobrecargarse mucho si no se controla bien el crecimiento de los beans definidos. Sobreutilizar la inyección de dependencia puede hacer el archivo de configuración muy complicado y sobrecargado.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1943</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1943"/>
				<updated>2009-02-25T12:56:14Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
              class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usar ids como identificadores de beans ==&lt;br /&gt;
&lt;br /&gt;
Se pueden especificar un name o un id como identificador de beans. Utilizar ids no incrementa la legibilidad, pero puede permitir que el parser XML valide las referencias de los beans. Si los ids no pueden ser utilizados debido a alguna restriccion XML IDREF, se pueden utilizar nombres como identificadores de beans. La restriccion XML IDREF dice que los ids deben comenzar con una letra (o alguno de los pocos caracteres de signo de puntuación permitidos en la especificación XML) seguido de letras, digitos, guiones, guiones bajos, dos puntos, o punto. Es muy raro que en algun proyecto tengamos un problema con algun nombre por no cumplir con estas restricciones.&lt;br /&gt;
&lt;br /&gt;
== Usar dependency-check durante la fase de desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se puede asignar al atributo dependency-check en la definicion de un bean un valor destinto del default '''none''', como ser: '''simple''', '''objects''', o '''all'''. Con esto el contenedor puede realizar valiadciones de dependencias. Esto es util cuando todas las propiedades (o cierto grupo de propiedades) de un bean deben ser asignadas explicitamente (o por autowiring...pero ya dijimos lo malo de usar autowiring).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        dependency-check=&amp;quot;objects&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, el contendedor se asegurara que las propiedades de InvasorService que no sean primitivos o colecciones esten asignadas. Se puede configurar el chequeo de dependencias para que controle que todas las propiedades del bean esten asignadas, pero esto es necesario en raras ocasiones ya que puede que haya propiedades que no necesiten ser asignadas.&lt;br /&gt;
&lt;br /&gt;
== Agregar un descripcion en el encabezado de cada archivo de configuración ==&lt;br /&gt;
&lt;br /&gt;
Es preferible usar ids y nombres descriptivos en vez de utilizar comentarios en los archivos de configuración. Adicionalmente, es útil agregar un encabezado en los archivos de configuración, el cual englobe los beans definidos en el archivo. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&lt;br /&gt;
        Este archivo define los Invasores que&lt;br /&gt;
        atacaran los disintos planetas. Depende&lt;br /&gt;
        de RobotsServices.xml, el cual provee los&lt;br /&gt;
        servicios de los robots que cada invasor tiene&lt;br /&gt;
        asignado....&lt;br /&gt;
    &amp;lt;/description&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comunicar los cambios al equipo ==&lt;br /&gt;
&lt;br /&gt;
Cuando se esta refactorizando código Java, es necesario asegurarse de actualizar el archivo de configuración para que refleje los cambios realizados e informar estos cambios a los miembros del equipo. El archivo de configuración XML es parte del código y es una parte crítica de la aplicación. La mayoria de las veces es necesario leer tanto el archivo XML como el código java para comprender como funciona algun componente.&lt;br /&gt;
&lt;br /&gt;
== Utilizar inyección de dependencias por Setter en vez de por Constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring provee tres tipos de inyección de dependencias: inyección por constructor, por setter y por método. Usualmente solamente utilizamos las dos primera.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot; class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;robotService&amp;quot; class=&amp;quot;com.dosideas.spring.RobotService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotDAO&amp;quot; ref=&amp;quot;robotDAO&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, el bean '''invasorService''' usa inyección por constructor, mientras que el bean '''robotService''' usa inyección por setter. La inyección de dependencias por constructor garantiza que el bean no sera construido con un estado inválido, pero la inyección de dependencias por setters es mucho mas flexible, especialmente cuando la clase tiene muchas propiedades y la mayoria de ellas son opcionales.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1942</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1942"/>
				<updated>2009-02-25T12:49:18Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
              class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usar ids como identificadores de beans ==&lt;br /&gt;
&lt;br /&gt;
Se pueden especificar un name o un id como identificador de beans. Utilizar ids no incrementa la legibilidad, pero puede permitir que el parser XML valide las referencias de los beans. Si los ids no pueden ser utilizados debido a alguna restriccion XML IDREF, se pueden utilizar nombres como identificadores de beans. La restriccion XML IDREF dice que los ids deben comenzar con una letra (o alguno de los pocos caracteres de signo de puntuación permitidos en la especificación XML) seguido de letras, digitos, guiones, guiones bajos, dos puntos, o punto. Es muy raro que en algun proyecto tengamos un problema con algun nombre por no cumplir con estas restricciones.&lt;br /&gt;
&lt;br /&gt;
== Usar dependency-check durante la fase de desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se puede asignar al atributo dependency-check en la definicion de un bean un valor destinto del default '''none''', como ser: '''simple''', '''objects''', o '''all'''. Con esto el contenedor puede realizar valiadciones de dependencias. Esto es util cuando todas las propiedades (o cierto grupo de propiedades) de un bean deben ser asignadas explicitamente (o por autowiring...pero ya dijimos lo malo de usar autowiring).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        dependency-check=&amp;quot;objects&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, el contendedor se asegurara que las propiedades de InvasorService que no sean primitivos o colecciones esten asignadas. Se puede configurar el chequeo de dependencias para que controle que todas las propiedades del bean esten asignadas, pero esto es necesario en raras ocasiones ya que puede que haya propiedades que no necesiten ser asignadas.&lt;br /&gt;
&lt;br /&gt;
== Agregar un descripcion en el encabezado de cada archivo de configuración ==&lt;br /&gt;
&lt;br /&gt;
Es preferible usar ids y nombres descriptivos en vez de utilizar comentarios en los archivos de configuración. Adicionalmente, es útil agregar un encabezado en los archivos de configuración, el cual englobe los beans definidos en el archivo. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&lt;br /&gt;
        Este archivo define los Invasores que&lt;br /&gt;
        atacaran los disintos planetas. Depende&lt;br /&gt;
        de RobotsServices.xml, el cual provee los&lt;br /&gt;
        servicios de los robots que cada invasor tiene&lt;br /&gt;
        asignado....&lt;br /&gt;
    &amp;lt;/description&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comunicar los cambios al equipo ==&lt;br /&gt;
&lt;br /&gt;
Cuando se esta refactorizando código Java, es necesario asegurarse de actualizar el archivo de configuración para que refleje los cambios realizados e informar estos cambios a los miembros del equipo. El archivo de configuración XML es parte del código y es una parte crítica de la aplicación. La mayoria de las veces es necesario leer tanto el archivo XML como el código java para comprender como funciona algun componente.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1941</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1941"/>
				<updated>2009-02-25T12:44:57Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
              class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usar ids como identificadores de beans ==&lt;br /&gt;
&lt;br /&gt;
Se pueden especificar un name o un id como identificador de beans. Utilizar ids no incrementa la legibilidad, pero puede permitir que el parser XML valide las referencias de los beans. Si los ids no pueden ser utilizados debido a alguna restriccion XML IDREF, se pueden utilizar nombres como identificadores de beans. La restriccion XML IDREF dice que los ids deben comenzar con una letra (o alguno de los pocos caracteres de signo de puntuación permitidos en la especificación XML) seguido de letras, digitos, guiones, guiones bajos, dos puntos, o punto. Es muy raro que en algun proyecto tengamos un problema con algun nombre por no cumplir con estas restricciones.&lt;br /&gt;
&lt;br /&gt;
== Usar dependency-check durante la fase de desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se puede asignar al atributo dependency-check en la definicion de un bean un valor destinto del default '''none''', como ser: '''simple''', '''objects''', o '''all'''. Con esto el contenedor puede realizar valiadciones de dependencias. Esto es util cuando todas las propiedades (o cierto grupo de propiedades) de un bean deben ser asignadas explicitamente (o por autowiring...pero ya dijimos lo malo de usar autowiring).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        dependency-check=&amp;quot;objects&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, el contendedor se asegurara que las propiedades de InvasorService que no sean primitivos o colecciones esten asignadas. Se puede configurar el chequeo de dependencias para que controle que todas las propiedades del bean esten asignadas, pero esto es necesario en raras ocasiones ya que puede que haya propiedades que no necesiten ser asignadas.&lt;br /&gt;
&lt;br /&gt;
== Agregar un descripcion en el encabezado de cada archivo de configuración ==&lt;br /&gt;
&lt;br /&gt;
Es preferible usar ids y nombres descriptivos en vez de utilizar comentarios en los archivos de configuración. Adicionalmente, es útil agregar un encabezado en los archivos de configuración, el cual englobe los beans definidos en el archivo. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&lt;br /&gt;
        Este archivo define los Invasores que&lt;br /&gt;
        atacaran los disintos planetas. Depende&lt;br /&gt;
        de RobotsServices.xml, el cual provee los&lt;br /&gt;
        servicios de los robots que cada invasor tiene&lt;br /&gt;
        asignado....&lt;br /&gt;
    &amp;lt;/description&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1940</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1940"/>
				<updated>2009-02-25T12:40:27Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Usar dependency-check durante la fase de desarrollo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
              class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usar ids como identificadores de beans ==&lt;br /&gt;
&lt;br /&gt;
Se pueden especificar un name o un id como identificador de beans. Utilizar ids no incrementa la legibilidad, pero puede permitir que el parser XML valide las referencias de los beans. Si los ids no pueden ser utilizados debido a alguna restriccion XML IDREF, se pueden utilizar nombres como identificadores de beans. La restriccion XML IDREF dice que los ids deben comenzar con una letra (o alguno de los pocos caracteres de signo de puntuación permitidos en la especificación XML) seguido de letras, digitos, guiones, guiones bajos, dos puntos, o punto. Es muy raro que en algun proyecto tengamos un problema con algun nombre por no cumplir con estas restricciones.&lt;br /&gt;
&lt;br /&gt;
== Usar dependency-check durante la fase de desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se puede asignar al atributo dependency-check en la definicion de un bean un valor destinto del default '''none''', como ser: '''simple''', '''objects''', o '''all'''. Con esto el contenedor puede realizar valiadciones de dependencias. Esto es util cuando todas las propiedades (o cierto grupo de propiedades) de un bean deben ser asignadas explicitamente (o por autowiring...pero ya dijimos lo malo de usar autowiring).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        dependency-check=&amp;quot;objects&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, el contendedor se asegurara que las propiedades de InvasorService que no sean primitivos o colecciones esten asignadas. Se puede configurar el chequeo de dependencias para que controle que todas las propiedades del bean esten asignadas, pero esto es necesario en raras ocasiones ya que puede que haya propiedades que no necesiten ser asignadas.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1939</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1939"/>
				<updated>2009-02-25T12:40:12Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Usar dependency-check durante la fase de desarrollo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
              class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usar ids como identificadores de beans ==&lt;br /&gt;
&lt;br /&gt;
Se pueden especificar un name o un id como identificador de beans. Utilizar ids no incrementa la legibilidad, pero puede permitir que el parser XML valide las referencias de los beans. Si los ids no pueden ser utilizados debido a alguna restriccion XML IDREF, se pueden utilizar nombres como identificadores de beans. La restriccion XML IDREF dice que los ids deben comenzar con una letra (o alguno de los pocos caracteres de signo de puntuación permitidos en la especificación XML) seguido de letras, digitos, guiones, guiones bajos, dos puntos, o punto. Es muy raro que en algun proyecto tengamos un problema con algun nombre por no cumplir con estas restricciones.&lt;br /&gt;
&lt;br /&gt;
== Usar dependency-check durante la fase de desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se puede asignar al atributo dependency-check en la definicion de un bean un valor destinto del default '''none''', como ser: '''simple''', '''objects''', o '''all'''. Con esto el contenedor puede realizar valiadciones de dependencias. Esto es util cuando todas las propiedades (o cierto grupo de propiedades) de un bean deben ser asignadas explicitamente (o por autowiring...pero ya dijimos lo malo de usar autowiring :) ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        dependency-check=&amp;quot;objects&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, el contendedor se asegurara que las propiedades de InvasorService que no sean primitivos o colecciones esten asignadas. Se puede configurar el chequeo de dependencias para que controle que todas las propiedades del bean esten asignadas, pero esto es necesario en raras ocasiones ya que puede que haya propiedades que no necesiten ser asignadas.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1938</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1938"/>
				<updated>2009-02-25T12:39:23Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Usar dependency-check durante la fase de desarrollo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
              class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usar ids como identificadores de beans ==&lt;br /&gt;
&lt;br /&gt;
Se pueden especificar un name o un id como identificador de beans. Utilizar ids no incrementa la legibilidad, pero puede permitir que el parser XML valide las referencias de los beans. Si los ids no pueden ser utilizados debido a alguna restriccion XML IDREF, se pueden utilizar nombres como identificadores de beans. La restriccion XML IDREF dice que los ids deben comenzar con una letra (o alguno de los pocos caracteres de signo de puntuación permitidos en la especificación XML) seguido de letras, digitos, guiones, guiones bajos, dos puntos, o punto. Es muy raro que en algun proyecto tengamos un problema con algun nombre por no cumplir con estas restricciones.&lt;br /&gt;
&lt;br /&gt;
== Usar dependency-check durante la fase de desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se puede asignar al atributo dependency-check en la definicion de un bean un valor destinto del default '''none''', como ser: '''simple''', '''objects''', o '''all'''. Con esto el contenedor puede realizar valiadciones de dependencias. Esto es util cuando todas las propiedades (o cierto grupo de propiedades) de un bean deben ser asignadas explicitamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        dependency-check=&amp;quot;objects&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, el contendedor se asegurara que las propiedades de InvasorService que no sean primitivos o colecciones esten asignadas. Se puede configurar el chequeo de dependencias para que controle que todas las propiedades del bean esten asignadas, pero esto es necesario en raras ocasiones ya que puede que haya propiedades que no necesiten ser asignadas.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1937</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1937"/>
				<updated>2009-02-25T12:35:57Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
              class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usar ids como identificadores de beans ==&lt;br /&gt;
&lt;br /&gt;
Se pueden especificar un name o un id como identificador de beans. Utilizar ids no incrementa la legibilidad, pero puede permitir que el parser XML valide las referencias de los beans. Si los ids no pueden ser utilizados debido a alguna restriccion XML IDREF, se pueden utilizar nombres como identificadores de beans. La restriccion XML IDREF dice que los ids deben comenzar con una letra (o alguno de los pocos caracteres de signo de puntuación permitidos en la especificación XML) seguido de letras, digitos, guiones, guiones bajos, dos puntos, o punto. Es muy raro que en algun proyecto tengamos un problema con algun nombre por no cumplir con estas restricciones.&lt;br /&gt;
&lt;br /&gt;
== Usar dependency-check durante la fase de desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se puede asignar al atributo dependency-check en la definicion de un bean un valor destinto del default '''none'', como ser: '''simple''', '''objects''', o '''all'''. Con esto el contenedor puede realizar valiadciones de dependencias. Esto es util cuando todas las propiedades (o cierto grupo de propiedades) de un bean deben ser asignadas explicitamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        dependency-check=&amp;quot;objects&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo, el contendedor se asegurara que las propiedades de InvasorService que no sean primitivos o colecciones esten asignadas. Se puede configurar el chequeo de dependencias para que controle que todas las propiedades del bean esten asignadas, pero esto es necesario en raras ocasiones ya que puede que haya propiedades que no necesiten ser asignadas.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1936</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1936"/>
				<updated>2009-02-25T12:27:55Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
              class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usar ids como identificadores de beans ==&lt;br /&gt;
&lt;br /&gt;
Se pueden especificar un name o un id como identificador de beans. Utilizar ids no incrementa la legibilidad, pero puede permitir que el parser XML valide las referencias de los beans. Si los ids no pueden ser utilizados debido a alguna restriccion XML IDREF, se pueden utilizar nombres como identificadores de beans. La restriccion XML IDREF dice que los ids deben comenzar con una letra (o alguno de los pocos caracteres de signo de puntuación permitidos en la especificación XML) seguido de letras, digitos, guiones, guiones bajos, dos puntos, o punto. Es muy raro que en algun proyecto tengamos un problema con algun nombre por no cumplir con estas restricciones.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1935</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1935"/>
				<updated>2009-02-25T12:23:12Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Integrar archivos de configuración mediante ApplicationContext y no  utilizando import */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
              class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1934</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1934"/>
				<updated>2009-02-25T12:23:01Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Integrar archivos de configuración mediante ApplicationContext y no  utilizando import */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; &lt;br /&gt;
class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1933</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1933"/>
				<updated>2009-02-25T12:22:41Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;br /&gt;
&lt;br /&gt;
== Integrar archivos de configuración mediante ApplicationContext y no  utilizando import ==&lt;br /&gt;
&lt;br /&gt;
Al igual que el import en los scripts de Ant, el import en Spring es conveniente para unir archivos modularizados de comfiguración. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;InvasorServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;import resource=&amp;quot;RobotsServices.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;bean id=&amp;quot;PlanetaObjetivoService&amp;quot; class=&amp;quot;com.dosideas.spring.PlanetaObjetivoService&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;beans&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En vez de unirlos dentro del XML utilizando imports, es mucho mas flexible configurarlo a traves del ApplicationContext. Utilizando ApplicationContext tambien hace que nuestra configuración XML sea mas facil de manejar. Se le puede pasar como argumento al constructor de ApplicationContext una lista de archivos de configuración. Nuestro ejemplo anterior quedaria:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String[] serviceResources =&lt;br /&gt;
        {&amp;quot;PlanetaServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;InvasorServices.xml&amp;quot;,&lt;br /&gt;
        &amp;quot;RobotServices.xml&amp;quot;};&lt;br /&gt;
ApplicationContext orderServiceContext = new&lt;br /&gt;
        ClassPathXmlApplicationContext(serviceResources);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1932</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1932"/>
				<updated>2009-02-25T12:11:38Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;br /&gt;
&lt;br /&gt;
== En lo posible, reutilizar definiciones de Beans ==&lt;br /&gt;
&lt;br /&gt;
Spring ofrece un mecanismo de pseudo-herencia que reduce la duplicacion de informacion en los archivos de configuracion. Una definición de un Bean hijo puede heredar la información de configuracion de sus padres, los cuales sirven como un &amp;quot;template&amp;quot; para los beans hijos. En grandes proyectos el uso de este feature deberia ser obligatorio. Todo lo que se necesita hacer es especificar '''abstract=true''' en el Bean padre y referenciar a dicho Bean desde los Beans hijos. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;abstractInvasorService&amp;quot; abstract=&amp;quot;true&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.AbstractInvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        parent=&amp;quot;abstractInvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;robotAsignado&amp;quot; value=&amp;quot;Gir&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El bean ''InvasorService'' hereda el valor '''Zim''' para la propiedad '''nombreInvasor''' del bean ''abstractInvasorService''. Una aclaración: Si no se especifica el nombre de una clase un un factory method en la definición de un bean, este bean es implicitamente abstracto.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1931</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1931"/>
				<updated>2009-02-25T11:56:02Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;br /&gt;
&lt;br /&gt;
== Utilizar type en vez de index para los argumentos del constructor ==&lt;br /&gt;
&lt;br /&gt;
Spring permite utilizar indices (que comienzan en cero) para resolver el problema de ambigüedad cuando un constructor tiene mas de un argumento del mismo tipo, o cuando se utiliza el atributo '''value''' para asignar el valor. Por ejemplo, en vez de:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvazorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;0&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg index=&amp;quot;1&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
es mejor utilizar el atributo '''type''' de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg type=&amp;quot;int&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utilizar '''index''' es mas sencillo, ya que tipeamos menos, pero es mas propenso a errores y mucho mas dificil de leer que si utilizamos '''type'''. Se deberia utilizar '''index''' solamente cuando se presenta una ambigüedad en los argumentos del constructor.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1930</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1930"/>
				<updated>2009-02-25T11:38:47Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;br /&gt;
&lt;br /&gt;
== Usar formas abreviadas de configuración ==&lt;br /&gt;
&lt;br /&gt;
Las formas abreviadas son mas faciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;Zim&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/property&amp;gt;&lt;br /&gt;
       &amp;lt;constructor-arg&amp;gt;&lt;br /&gt;
          &amp;lt;ref bean=&amp;quot;invasorDAO&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puede ser reescrito de forma abreviada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;InvasorService&amp;quot;&lt;br /&gt;
      class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;property name=&amp;quot;nombreInvasor&amp;quot; value=&amp;quot;Zim&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;constructor-arg ref=&amp;quot;invasorDAO&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este feature esta disponible desde la versión 1.2 de Spring. Vale aclarar que no existe abreviacion para el elemento &amp;lt;ref local=&amp;quot;...&amp;quot;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Esta forma de abreviar nuestra configuración no solo nos evita tipear, tambien deja al archivo XML mucho mas claro.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1929</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1929"/>
				<updated>2009-02-25T11:26:47Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aqui hay una recopilacion de buenas practicas a la hora de configurar Spring, las mismas son traducciones de: [http://www.onjava.com/pub/a/onjava/2006/01/25/spring-xml-configuration-best-practices.html Twelve Best Practices for Spring XML]&lt;br /&gt;
&lt;br /&gt;
== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1928</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1928"/>
				<updated>2009-02-25T11:24:47Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;br /&gt;
&lt;br /&gt;
== Usar convenciones de nomenclatura ==&lt;br /&gt;
&lt;br /&gt;
Esta es la misma filosofia que utilizamo con el código Java. Usar una nomenclatura clara, descriptiva y consistente en todo el proyecto es de gran ayuda para que los desarrolladores entiendan la configuración XML. Para el id de los Beans, por ejemplo, se puede seguir la convención de atributos de una clase Java. El Bean ID de una instancia de ''InvasorDAO'' podria ser ''InvasorDAO''. En proyectos grandes, se puede agregar el nombre del paquete como prefijo del Bean ID.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Configuracion_De_Spring&amp;diff=1927</id>
		<title>Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Configuracion_De_Spring&amp;diff=1927"/>
				<updated>2009-02-25T11:20:45Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dependiendo el tipo de aplicación y entorno, la configuración del contexto de [[Spring Framework]] varia. &lt;br /&gt;
&lt;br /&gt;
==Aplicaciones web==&lt;br /&gt;
En las aplicaciones web, Spring puede configurarse de manera muy simple a través de un Listener o un Servlet.&lt;br /&gt;
&lt;br /&gt;
En el archivo ''web.xml'' se agrega la variable de contexto ''contextConfigLocation'', la cual apunta a los archivos de configuración. Luego, puede utilizarse el listener ''ContextLoaderListener'' o el servlet ''ContextLoaderServlet'' (ambos provistos por el framework) para que inicialicen el contexto de Spring. &lt;br /&gt;
&lt;br /&gt;
===Configuración usando ContextLoaderListener===&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;web-app&amp;gt;&lt;br /&gt;
    &amp;lt;context-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;&lt;br /&gt;
            classpath:archivoDeSpring1.xml,&lt;br /&gt;
            classpath:archivoDeSpring2.xml&lt;br /&gt;
        &amp;lt;/param-value&amp;gt;&lt;br /&gt;
    &amp;lt;/context-param&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;listener&amp;gt;&lt;br /&gt;
        &amp;lt;listener-class&amp;gt;&lt;br /&gt;
            org.springframework.web.context.ContextLoaderListener&lt;br /&gt;
        &amp;lt;/listener-class&amp;gt;&lt;br /&gt;
    &amp;lt;/listener&amp;gt;&lt;br /&gt;
&amp;lt;/web-app&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Obtención del contexto===&lt;br /&gt;
Con el contexto configurado, se utiliza la clase ''WebApplicationContextUtils'' para acceder al contexto de Spring. &lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);&lt;br /&gt;
FooBean foo = (FooBean) context.getBean(&amp;quot;fooBean&amp;quot;); &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Obtener Variables De Entorno Con Spring]]&lt;br /&gt;
* [http://static.springframework.org/spring/docs/1.2.x/api/org/springframework/web/context/support/WebApplicationContextUtils.html Javadoc de WebApplicationContextUtils]&lt;br /&gt;
* [[Buenas Practicas De Configuracion De Spring]]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Configuracion_De_Spring&amp;diff=1926</id>
		<title>Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Configuracion_De_Spring&amp;diff=1926"/>
				<updated>2009-02-25T11:20:32Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dependiendo el tipo de aplicación y entorno, la configuración del contexto de [[Spring Framework]] varia. &lt;br /&gt;
&lt;br /&gt;
==Aplicaciones web==&lt;br /&gt;
En las aplicaciones web, Spring puede configurarse de manera muy simple a través de un Listener o un Servlet.&lt;br /&gt;
&lt;br /&gt;
En el archivo ''web.xml'' se agrega la variable de contexto ''contextConfigLocation'', la cual apunta a los archivos de configuración. Luego, puede utilizarse el listener ''ContextLoaderListener'' o el servlet ''ContextLoaderServlet'' (ambos provistos por el framework) para que inicialicen el contexto de Spring. &lt;br /&gt;
&lt;br /&gt;
===Configuración usando ContextLoaderListener===&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;web-app&amp;gt;&lt;br /&gt;
    &amp;lt;context-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;&lt;br /&gt;
            classpath:archivoDeSpring1.xml,&lt;br /&gt;
            classpath:archivoDeSpring2.xml&lt;br /&gt;
        &amp;lt;/param-value&amp;gt;&lt;br /&gt;
    &amp;lt;/context-param&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;listener&amp;gt;&lt;br /&gt;
        &amp;lt;listener-class&amp;gt;&lt;br /&gt;
            org.springframework.web.context.ContextLoaderListener&lt;br /&gt;
        &amp;lt;/listener-class&amp;gt;&lt;br /&gt;
    &amp;lt;/listener&amp;gt;&lt;br /&gt;
&amp;lt;/web-app&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Obtención del contexto===&lt;br /&gt;
Con el contexto configurado, se utiliza la clase ''WebApplicationContextUtils'' para acceder al contexto de Spring. &lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);&lt;br /&gt;
FooBean foo = (FooBean) context.getBean(&amp;quot;fooBean&amp;quot;); &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Obtener Variables De Entorno De Spring]]&lt;br /&gt;
* [http://static.springframework.org/spring/docs/1.2.x/api/org/springframework/web/context/support/WebApplicationContextUtils.html Javadoc de WebApplicationContextUtils]&lt;br /&gt;
* [[Buenas Practicas De Configuracion Con Spring]]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1924</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1924"/>
				<updated>2009-02-25T11:20:08Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: Buenas Practicas De Configuracion Con Spring trasladada a Buenas Practicas De Configuracion De Spring: Estoy dormido...Sorry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_Con_Spring&amp;diff=1925</id>
		<title>Buenas Practicas De Configuracion Con Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_Con_Spring&amp;diff=1925"/>
				<updated>2009-02-25T11:20:08Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: Buenas Practicas De Configuracion Con Spring trasladada a Buenas Practicas De Configuracion De Spring: Estoy dormido...Sorry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Buenas Practicas De Configuracion De Spring]]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Configuracion_De_Spring&amp;diff=1923</id>
		<title>Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Configuracion_De_Spring&amp;diff=1923"/>
				<updated>2009-02-25T11:19:23Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dependiendo el tipo de aplicación y entorno, la configuración del contexto de [[Spring Framework]] varia. &lt;br /&gt;
&lt;br /&gt;
==Aplicaciones web==&lt;br /&gt;
En las aplicaciones web, Spring puede configurarse de manera muy simple a través de un Listener o un Servlet.&lt;br /&gt;
&lt;br /&gt;
En el archivo ''web.xml'' se agrega la variable de contexto ''contextConfigLocation'', la cual apunta a los archivos de configuración. Luego, puede utilizarse el listener ''ContextLoaderListener'' o el servlet ''ContextLoaderServlet'' (ambos provistos por el framework) para que inicialicen el contexto de Spring. &lt;br /&gt;
&lt;br /&gt;
===Configuración usando ContextLoaderListener===&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;web-app&amp;gt;&lt;br /&gt;
    &amp;lt;context-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;&lt;br /&gt;
            classpath:archivoDeSpring1.xml,&lt;br /&gt;
            classpath:archivoDeSpring2.xml&lt;br /&gt;
        &amp;lt;/param-value&amp;gt;&lt;br /&gt;
    &amp;lt;/context-param&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;listener&amp;gt;&lt;br /&gt;
        &amp;lt;listener-class&amp;gt;&lt;br /&gt;
            org.springframework.web.context.ContextLoaderListener&lt;br /&gt;
        &amp;lt;/listener-class&amp;gt;&lt;br /&gt;
    &amp;lt;/listener&amp;gt;&lt;br /&gt;
&amp;lt;/web-app&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Obtención del contexto===&lt;br /&gt;
Con el contexto configurado, se utiliza la clase ''WebApplicationContextUtils'' para acceder al contexto de Spring. &lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);&lt;br /&gt;
FooBean foo = (FooBean) context.getBean(&amp;quot;fooBean&amp;quot;); &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Obtener Variables De Entorno Con Spring]]&lt;br /&gt;
* [http://static.springframework.org/spring/docs/1.2.x/api/org/springframework/web/context/support/WebApplicationContextUtils.html Javadoc de WebApplicationContextUtils]&lt;br /&gt;
* [[Buenas Practicas De Configuracion Con Spring]]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Spring_Framework&amp;diff=1922</id>
		<title>Spring Framework</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Spring_Framework&amp;diff=1922"/>
				<updated>2009-02-25T11:18:57Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Spring Framework (también conocido simplemente como Spring) es un framework [[Java]] de [[Software Libre]], liviano de aplicación (también existe actualmente una versión para .NET). Su principal característica es brindar un factory de objetos basado en la [[Inyeccion De Dependencia]].&lt;br /&gt;
&lt;br /&gt;
Por su diseño el framework ofrece mucha libertad a los desarrolladores en Java y soluciones muy bien documentadas y fáciles de usar para las prácticas comunes en la industria.&lt;br /&gt;
&lt;br /&gt;
Mientras que las características fundamentales de este framework pueden emplearse en cualquier aplicación hecha en Java, existen muchas extensiones y mejoras para construir aplicaciones basadas en web por encima de la plataforma [[Java EE]]&lt;br /&gt;
&lt;br /&gt;
{{curso|url=http://www.dosideas.com/cursos/course/view.php?id=4|nombre=Introducción al desarrollo Java EE}}&lt;br /&gt;
&lt;br /&gt;
==Descargar la librería==&lt;br /&gt;
Spring puede bajarse libremente de la [http://www.springframework.org web oficial de Spring].&lt;br /&gt;
&lt;br /&gt;
Existen dos distribuciones básicas: la librería de Spring por si misma, y un paquete que contiene Spring junto con todas las dependencias (&amp;quot;with-dependencies&amp;quot;). Este último paquete es el recomendado para comenzar con Spring.&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Configuracion De Spring]]&lt;br /&gt;
* [[Enviar Mails Con Spring]]&lt;br /&gt;
* [[Interceptores Con Spring]]&lt;br /&gt;
* [[Instanciacion De Objetos Con Spring]]&lt;br /&gt;
* [[Transacciones Con Spring]]&lt;br /&gt;
* [[Mensajeria Con Spring]]&lt;br /&gt;
* [[Hibernate Con Spring]]&lt;br /&gt;
* [[Web Service Con Spring]]&lt;br /&gt;
* [[Ejb Con Spring]]&lt;br /&gt;
* [[JSF Con Spring]]&lt;br /&gt;
* [[Groovy Con Spring]]&lt;br /&gt;
* [[Spring Batch]]&lt;br /&gt;
&lt;br /&gt;
==Más información==&lt;br /&gt;
* [http://www.springframework.org Web oficial de Spring ]&lt;br /&gt;
* [http://es.wikipedia.org/wiki/Spring_Framework Spring en la Wikipedia ]&lt;br /&gt;
* [http://www.springframework.org/docs/Spring-MVC-step-by-step/ Developing a Spring Framework MVC application step-by-step ]&lt;br /&gt;
* [http://wiki.netbeans.org/SpringMVConNetBeansGlassFish Step-by-step: Spring MVC with NetBeans and GlassFish]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Spring_Framework&amp;diff=1921</id>
		<title>Spring Framework</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Spring_Framework&amp;diff=1921"/>
				<updated>2009-02-25T11:18:39Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Spring Framework (también conocido simplemente como Spring) es un framework [[Java]] de [[Software Libre]], liviano de aplicación (también existe actualmente una versión para .NET). Su principal característica es brindar un factory de objetos basado en la [[Inyeccion De Dependencia]].&lt;br /&gt;
&lt;br /&gt;
Por su diseño el framework ofrece mucha libertad a los desarrolladores en Java y soluciones muy bien documentadas y fáciles de usar para las prácticas comunes en la industria.&lt;br /&gt;
&lt;br /&gt;
Mientras que las características fundamentales de este framework pueden emplearse en cualquier aplicación hecha en Java, existen muchas extensiones y mejoras para construir aplicaciones basadas en web por encima de la plataforma [[Java EE]]&lt;br /&gt;
&lt;br /&gt;
{{curso|url=http://www.dosideas.com/cursos/course/view.php?id=4|nombre=Introducción al desarrollo Java EE}}&lt;br /&gt;
&lt;br /&gt;
==Descargar la librería==&lt;br /&gt;
Spring puede bajarse libremente de la [http://www.springframework.org web oficial de Spring].&lt;br /&gt;
&lt;br /&gt;
Existen dos distribuciones básicas: la librería de Spring por si misma, y un paquete que contiene Spring junto con todas las dependencias (&amp;quot;with-dependencies&amp;quot;). Este último paquete es el recomendado para comenzar con Spring.&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Configuracion De Spring]]&lt;br /&gt;
* [[Enviar Mails Con Spring]]&lt;br /&gt;
* [[Interceptores Con Spring]]&lt;br /&gt;
* [[Instanciacion De Objetos Con Spring]]&lt;br /&gt;
* [[Transacciones Con Spring]]&lt;br /&gt;
* [[Mensajeria Con Spring]]&lt;br /&gt;
* [[Hibernate Con Spring]]&lt;br /&gt;
* [[Web Service Con Spring]]&lt;br /&gt;
* [[Ejb Con Spring]]&lt;br /&gt;
* [[JSF Con Spring]]&lt;br /&gt;
* [[Groovy Con Spring]]&lt;br /&gt;
* [[Spring Batch]]&lt;br /&gt;
* [[Buenas Practicas De Configuracion Con Spring]]&lt;br /&gt;
&lt;br /&gt;
==Más información==&lt;br /&gt;
* [http://www.springframework.org Web oficial de Spring ]&lt;br /&gt;
* [http://es.wikipedia.org/wiki/Spring_Framework Spring en la Wikipedia ]&lt;br /&gt;
* [http://www.springframework.org/docs/Spring-MVC-step-by-step/ Developing a Spring Framework MVC application step-by-step ]&lt;br /&gt;
* [http://wiki.netbeans.org/SpringMVConNetBeansGlassFish Step-by-step: Spring MVC with NetBeans and GlassFish]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1919</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1919"/>
				<updated>2009-02-25T11:18:07Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: Buenas Practicas Con Spring trasladada a Buenas Practicas De Configuracion Con Spring: puse mal el nombre :P&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_Con_Spring&amp;diff=1920</id>
		<title>Buenas Practicas Con Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_Con_Spring&amp;diff=1920"/>
				<updated>2009-02-25T11:18:07Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: Buenas Practicas Con Spring trasladada a Buenas Practicas De Configuracion Con Spring: puse mal el nombre :P&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Buenas Practicas De Configuracion Con Spring]]&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1918</id>
		<title>Buenas Practicas De Configuracion De Spring</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Buenas_Practicas_De_Configuracion_De_Spring&amp;diff=1918"/>
				<updated>2009-02-25T11:16:48Z</updated>
		
		<summary type="html">&lt;p&gt;Gianu: Página nueva: == Evitar el uso de autowiring ==  Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Evitar el uso de autowiring ==&lt;br /&gt;
&lt;br /&gt;
Spring puede hacer autowiring de dependencias haciendo instropeccion de las clases, logrando de esta manera evitar que uno tenga que especificar las propiedades del bean o los argumentos de los constructores. Se puede hacer autowiring de las propiedades de los beans ya sea por nombre de propiedad o por tipo. En el caso de los constructores, solo se permite por tipo. Tambien se puede especificar el modo &amp;quot;autodetect autoriwiring&amp;quot;, que deja que Spring elija el mecanismo mas apropiado. Miremos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bean id=&amp;quot;invasorService&amp;quot;&lt;br /&gt;
        class=&amp;quot;com.dosideas.spring.InvasorService&amp;quot;&lt;br /&gt;
        autowire=&amp;quot;byName&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los nombres de las propiedades de la clase InvasorService son usadas para buscar instancias de beans en el contenedor. El uso de Autowiring nos salva de tipear mucho código. De todas formas, nunca deberiamos utilizar Autowiring en una aplicación real porque perjudicamos la legibilidad de nuestro archivo de configuración y la mantenibilidad del mismo. Parece una buena idea hacer que nuestros archivos XML de configuración sean pequeños, pero esto aumenta en gran medida la complejidad de comprensión de la solución.&lt;br /&gt;
&lt;br /&gt;
Spring tambien nos permite mezclar las dos técnicas (Autowiring y no-autowiring), pero con esto solamente lograriamos hacer mucho mas confusa la configuración.&lt;/div&gt;</summary>
		<author><name>Gianu</name></author>	</entry>

	</feed>