2011-11-23 16 views
6

Tengo un proyecto que tiene ... No sé ... 200-300 daos/servicios/controladores y uso @Autowired para conectar todo junto en lugar de especificar todo en el applicationContext.xml.¿El @Autowired de Spring es un gran problema de rendimiento?

Mi pregunta es, ¿qué tanto impacto en el rendimiento tiene esto en mis tiempos de inicio? ¿Valdría la pena eliminar todas las anotaciones @Autowired y en realidad cablear esta aplicación manualmente a través del applicationContext.xml?

Desde un punto de vista arquitectónico, me gusta @Autowired. No quiero agregar otra capa de complejidad utilizando el archivo xml; no agrega ningún valor en lo que a mí respecta. Pero si este tipo de cosas agrega 10 segundos al tiempo de carga de mi contenedor, puedo considerarlo. Si el costo es de 100 milisegundos, lo dejo tal como está.

Gracias

Respuesta

5

Prácticamente lo mismo. El escaneo de componentes es un poco más caro (cuando escanea para @Service, @Component), pero, como usted dijo, es el tiempo de inicio, ocurre una sola vez. Y en una máquina moderada, comienza bastante rápido incluso con anotaciones.

En general, no abandonaría el enfoque solo porque agrega un poco de tiempo de inicio. Y puedo asegurar que es nada significativo (trabajando en un proyecto más grande que su momento)

+0

Gracias. Luego tendré que encontrar una manera de reducir el tiempo de inicio en otras ubicaciones. Comienzo/detengo mucho el servidor cuando cambio las acciones del controlador y pruebo ajax. Solo quiero descubrir formas de reducir el tiempo de inicio. Me doy cuenta de que para la producción, esto no es un problema, pero para el desarrollo, este tiempo de inicio es realmente muy serio. – egervari

+0

No debe volver a desplegar con tanta frecuencia. Mira esto http://techblog.bozho.net/?p=714 – Bozho

+0

No creo que se pueda ayudar realmente. Aún ejecuto muchas pruebas de aplicación, y cambio las anotaciones con bastante frecuencia, por lo que hotswap no es una opción. – egervari

4

Hay un comentario interesante por @Masterhard en Spring @Autowired usage:

Estamos cambiando de nuevo a @Autowire configuración XML en nuestro gran proyecto El problema es muy bajo rendimiento de arranque. El escáner de autocableado carga todas las clases de la ruta de clase de búsqueda de autoenvío, por lo tanto, muchas clases se cargan con entusiasmo durante la inicialización de Spring.

Véase también p. SPR-6870.

¡Sin embargo! Autocablear usando anotaciones es tan conveniente que lo pensaría dos veces antes de volver a XML. A menos que el tiempo de inicio sea realmente un problema en su proyecto y pueda probar que es el escaneo CLASSPATH el que lo causa, quédese con las anotaciones. También recuerde que Java EE también se mueve hacia las anotaciones.

P.S .: El análisis de miles de líneas de XML también presenta algunos gastos generales.

+4

tenga en cuenta que hay una diferencia entre el autoencendido con anotaciones y el escaneo de componentes. Puede desactivar el escaneo de componentes y aún tener @Autowired. – Bozho

Cuestiones relacionadas