mvc mkyong framework form java spring apache pojo

java - mkyong - ¿Cuál es el significado exacto de invasor? ¿Y qué hace que Spring no sea invasiva?



spring framework 5 (8)

La mayoría de los frameworks java te obligan a extender una de sus clases o implementar una de sus interfaces. Ejemplo de un modelo de programación tan invasivo fueron los beans de sesión sin estado EJB 2, versiones anteriores de Struts, WebWork, Tapestry.

Spring evita ensuciar tu código con su API. Spring nunca te obliga a implementar una interfaz específica de Spring o extender una clase específica de Spring . En cambio, las clases a menudo no tienen ninguna indicación de que estén siendo utilizadas por Spring.

public class HelloWorld { public String hello() { return "Hello World"; } }

Esta es una clase simple de Java (POJO). Nada indica que sea un componente Spring. Spring no es invasivo significa que esta clase podría funcionar igual de bien en una aplicación Spring que podría hacerlo en una aplicación no Spring . Aunque los POJO son simples pueden ser poderosos.

Una de las maneras en que los POJO pueden llegar a ser poderosos en Spring es mediante el uso de Dependeny Injection.

Soy nuevo en el marco de la primavera. En la mayoría de los tutoriales de Spring que vi, Spring se describe como "no invasivo".

¿Qué se entiende por invasivo? ¿Cuáles son los méritos de usar Spring en Java y qué lo hace no invasivo?


La primavera puede ser invasiva y no invasiva, solo depende de usted.

Spring no invansivo no usa anotaciones (por ejemplo, @Autowired) ni sus propias clases (por ejemplo, JdbcTemplate), solo usa la configuración para conectar tus beans (POJO simple) (todavía debes inicializar Spring de alguna manera en tu código, que es un poco invasivo de todos modos). Pero usted es libre de abandonar Spring sin ningún cambio significativo en el código. La primavera invasiva, por otro lado, le proporciona clases de plantilla (para persistencia, servicios web, ...), anotaciones y otras cosas que no puede dejar atrás sin refactorizar (si las usa).

EDITAR: Algunos dicen que Spring no es invasivo, porque no te obliga a implementar interfaces ni a extender clases. Para mí, un marco no es invasivo, si se puede reemplazar fácilmente.


Se dice que Spring Framework es un medio no invasivo que no obliga a un programador a extender o implementar su clase desde cualquier clase predefinida o interfaz dada por Spring API. ser invasivo

En el caso de Struts Framework, obligará al programador a que, la clase de programador debe extenderse desde la clase base proporcionada por la API de struts.


Significado invasivo: se propaga muy rápidamente por todas partes. El autor de Spring dice que los frameworks como EJB, Struts, etc. están llenos de código específico del framework que es difícil de migrar a otros frameworks, lo que está en contra de la filosofía Java de escribir una vez y ejecutarse en cualquier lugar. Spring dice que no es invasivo porque usa POJO para escribir en el lado del servidor para que pueda migrarse a cualquier plataforma. Pero como lo sugirieron al menos 2 colaboradores en esta publicación, Spring es un cáncer contrario a lo que afirma

spring es un cáncer para un proyecto que, una vez que ha infectado tu proyecto, no puedes hacer nada sin hackear los archivos de configuración de Spring ... ¡no invasivo es bastante engañoso en ese aspecto! - user177800 11 de marzo de 13 a las 7:18


Un marco invasivo significa que está obligado a extender una de sus clases o implementar una de sus interfaces. Puedes ver eso en marcos como Struts o EJB2. La primavera no es invasiva porque evita eso. En el peor de los casos, una clase puede ser anotada con una de las anotaciones de Spring, pero por lo demás es un POJO. Así que solo necesitas un POJO como ese:

package com.habuma.spring; public class HelloWorldBean { public String sayHello() { return "Hello World"; } }


Use @Resource y @Inject en lugar de @Component y @Autowired. Es realmente útil y está estandarizado en marcos DI como Spring y Guice.


visite http://forum.springsource.org/showthread.php?27846-Spring-is-non-invasive

¿Qué significa realmente?

"No estás obligado a importar o extender ninguna API de Spring, por ejemplo, Struts te obliga a extender la Acción".

Por supuesto, en algunas áreas, como el marco web, es imposible evitar el código de aplicación dependiendo del marco. Pero Spring siempre intenta alcanzar el ideal no invasivo en lo que respecta a la administración de la configuración


Si un contenedor IoC es invasivo, significa que su código debe ser explícitamente consciente de la inyección de dependencia. Por ejemplo, en Guice usas la anotación @Inject (y otras). Estas anotaciones están más estandarizadas de lo que solían ser, lo que es bueno: significa que con un único conjunto de anotaciones puede (al menos en teoría) hacer que su código esté disponible para su uso con varios contenedores IoC invasivos diferentes.

Con un contenedor no invasivo, puede escribir su código sin ninguna referencia a IoC ... todo está determinado por la reflexión sobre los miembros y las anotaciones que estarían presentes incluso si no estuviera usando IoC.

Existen ventajas y desventajas tanto de los contenedores invasivos como de los no invasivos; por ejemplo, ser más específico en el código le puede dar más control sobre algunos de los detalles de la unión, pero vale la pena darse cuenta de la diferencia.