thw thhn significado qué quiere los decir cables cable java performance spring dependency-injection autowired

java - thhn - qué quiere decir thw en los cables



El cableado del muelle por tipo es más lento por magnitud que el cableado por nombre (2)

La mayoría de las aplicaciones de Spring conectan elementos al inicio, en lugar de tomar beans del contexto en tiempo de ejecución. Aún así, a menos que cambie el contexto de su aplicación mucho durante la ejecución regular de su aplicación, nunca debería buscar un bean más de una vez.

Dado que, si sus usuarios se quejan de lentitud, parece que su problema real son demasiadas búsquedas de beans; su uso de un medio más lento de hacerlo acaba de surgir el problema real.

Intentaré moverme a Java Config (configurar sus dependencias en Java, creo que es compatible con Spring 3.0) y configurar su aplicación para conectar todos los beans al inicio. Esto también tiene la ventaja de que su aplicación simplemente no se iniciará si no se pueden cumplir las dependencias.

En mi proyecto, estoy tratando de migrar todos los usos de

Foo foo = (Foo) beanFactory.getBean("name");

dentro

Foo foo = beanFactory.getBean(Foo.class);

Los beneficios son obvios: seguridad del tipo, código menos intrincado, constantes menos inútiles, etc. Normalmente, tales líneas se ubican en contextos heredados estáticos donde dicho cableado es la única opción.

Todo estuvo bien hasta que un día los usuarios empezaron a quejarse de la lentitud que resultó de la interna de Spring. Así que encendí un generador de perfiles para encontrar un punto de acceso en

org.springframework.beans.factory.support.AbstractBeanFactory::doGetBean(String, Class<T>, Object[], boolean)

que tiene una llamada cara a

Class.isAssignableFrom(anotherClass) .

He creado rápidamente una pequeña prueba de rendimiento para descubrir que la diferencia de velocidad entre el nombre de la cadena y las búsquedas de tipo es una alarma 350 veces (¡estoy usando StaticApplicationContext para esta prueba FAIW)!

Mientras investigaba esto, encontré SPR-6870 que tiene un gran número de votos, pero por alguna razón no se aborda. Esto me llevó a un intento de resolver este problema que mejora significativamente la situación, pero aún es más lento ~ 25 veces que la búsqueda de String! Resulta que este intento solo resuelve la mitad del problema: almacena en caché el nombre del bean para guardarlo en O (n) iteración, pero aún tiene que hacer call isAssignableFrom para validar el tipo.

El problema descrito no solo está relacionado con mi escenario, sino también con los beans que usan @Autowired y puede sentirse mucho en los casos en que se crean beans dentro de un bucle.

Una de las soluciones sería anular uno de los métodos de la fábrica de frijoles y guardar en caché los resultados de las verificaciones de is-this-bean-of-the-same-type, pero claramente esto debería hacerse en Spring y no en mi propio código.

¿Alguien más sufre de un problema similar y encontró una solución para ello?


Este problema ahora se resuelve en Spring con la resolución de SPR-6870 . Vea los comentarios de resolución allí para más detalles. La corrección está disponible a partir de las versiones 3.2.0.RELEASE y 3.1.2.