provides pom nfl google derrius java guice

java - pom - guice provides



¿Alguien puede dar una explicación clara de por qué Google Guice es útil? (3)

He leído sobre Google Guice y entiendo los problemas generales con otros enfoques para la inyección de dependencia, sin embargo, aún no he visto un ejemplo de alguien que use Guice "en la práctica", donde su valor se vuelve claro.

Me pregunto si alguien conoce estos ejemplos.


Creo que la ventaja viene con la codificación de interfaces, pruebas y proxies.

Codificar en una interfaz ayuda a mantener el código en capas de forma adecuada, hace posible la creación de simulaciones para las pruebas y permite generar proxies automágicamente para que el código del cliente no tenga que preocuparse por la implementación.

Esto es cierto para Guice, Spring, PicoContainer y todos los marcos DI.

Lo suficientemente sucinto?


Tal vez deberías retroceder en el tiempo y mirar más de cerca los problemas que Guice quería resolver. Para entender las motivaciones detrás de Guice, las noticias de Bob Lee: I Do Not Get Spring en TheServerSide.COM (y sus comentarios) son el punto de partida perfecto. Luego, continúe con el anuncio de Google Guice, Un marco de inyección de dependencia de Java (y los comentarios) y Tech Talk: Bob Lee en Google Guice (y los comentarios).

Personalmente, estaba compartiendo inquietudes sobre XML malvado: infierno de configuración XML, XML y posibles errores en tiempo de ejecución, identificadores de cadena adversos propensos a errores y refactorización, etc. De hecho, creo que las opiniones escépticas sobre Spring y la concurrencia fueron buenas para todos ( incluyendo Spring). Por lo tanto, me alegré de ver a un nuevo jugador en el panorama del marco DI, especialmente un marco moderno que aproveche las características de Java 5 (genéricos y anotaciones por el bien de la seguridad del tipo).

Y debido a que Google ejecuta Guice en aplicaciones de misión crítica (casi todas las aplicaciones basadas en Java son también una aplicación basada en Guice: AdWords , Google Docs, Gmail e incluso YouTube según lo informado por "Loco" Bob Lee en Guice² ), puedo " Creo que Guice está totalmente equivocado y no da ningún valor. Tristemente, no creo que Google proporcione muchos códigos de estas aplicaciones como ejemplos ... Pero puede encontrar cosas interesantes en la lista de aplicaciones que usan Guice y / o la lista de complementos de Guice de terceros . O Guice² los libros mencionados en Guice² . O pregunta a Bob :)


Usar Google Guice para proporcionar facilidad en las pruebas unitarias es solo una ventaja de alto nivel. Algunas personas pueden incluso no usar pruebas unitarias en su proyecto. La gente ha estado usando Spring / Dependency Injection más que solo para pruebas unitarias.

La ventaja de bajo nivel del uso de Google Guice es una cuestión de cohesión en su aplicación, sus clases en el proyecto pueden combinarse libremente entre sí. Puedo proporcionar una clase para otra clase sin que dependan el uno del otro.

Considera este ejemplo:

public class A{ } public class B{ A a = new A(); }

La clase B estaría estrechamente unida a la clase A, o en otras palabras, depende de la existencia de la clase A.

Pero con Guice, en cambio, puedo hacer que se acople de forma flexible de esta manera:

public class B{ private A a; @Inject public B(A a){ this.a = a; } }

La clase B ahora está flojamente acoplada a A, y Guice es responsable de proporcionar la instancia de A en lugar de B que tiene que crear una instancia. Con esto, puede ampliarlo para proporcionar una interfaz de A a B, y la implementación puede ser un objeto Mock si desea probar sus aplicaciones por un equipo.

Habiendo dicho eso, solo estamos discutiendo los beneficios de la Inyección de Dependencia hasta el momento. Más allá de la Inyección de Dependencia, los beneficios de usar Google Guice son:

  1. Guice tiene una implementación muy limpia de Inyección de constructor. Como puede ver en el ejemplo, simplemente agrega @Inject constructor de anotaciones.
  2. Guice también tiene setter Injection usando la misma anotación.
  3. Una vez dicho esto, la inyección basada en anotaciones es un enfoque muy limpio en comparación con la inyección basada en XML como en otras implementaciones de DI.
  4. Toda la inyección de la dependencia y la configuración utilizan Java, por lo que está garantizado que obtendrá un typesafety en su aplicación de forma predeterminada.
  5. Guice tiene una implementación muy ligera de la Programación Orientada a Aspectos (o puede llamarla como un envoltorio para la implementación de AOPAlliance AOP). Y lo bueno de esto es que no genera stubs o cualquier otra cosa.

Esa es la visión general de eso. Pero a medida que profundizas con Guice, hay muchas más cosas buenas al respecto. Un ejemplo simple de la vida real es que si está utilizando GWT con la implementación de MVP , los componentes / widgets en su aplicación GWT están muy poco acoplados y no están estrechamente integrados entre sí.