La mejor forma de entender qué tan complejo es un contenedor IoC es analizarlo.
En una experiencia en particular, una vez que tomé una tarde entera depurando un simple código 'Hello World' usando plexus, en el que se basa Maven (and here is a helpful link to browse its source code).Es un poco se acercó (examinado defaultPlexusContainer) como:
- configuración de rutas de clases (a través de classworlds)
- Creación de una variable de tiempo de ejecución de Contexto (básicamente un mapa), con el fin de propiedades del almacén y variables
- de configuración análisis sintáctico (descubrimiento de los módulos de metadatos en la ruta de clase, etc.)
- inicialización:
- Construcción/instanciación de los servicios
- Firing ComponentDiscoverers adicionales
- despido de ComponentDiscovererListeners adicionales
Esto deja un aspecto importante, profundamente en los pasos anteriores: Mirando para arriba un componente. En el plexo, el concepto de Fase envuelve los pasos para la construcción de un Objeto, y esas Fases están generalmente ligadas a un concepto de Personalidad. Sin embargo, para la default setting, esto se realiza mediante la ejecución de las siguientes fases:
- instanciación de objetos (es decir, new Object())
- Log Habilitación (es decir, el establecimiento de un registrador para el objeto)
- Composición : es decir, las operaciones de búsqueda y el establecimiento de la dependencia
- La estrategia colocador es un punto interesante, pero voy a dejar los detalles por ahora
- Th e pasar del contexto en el objeto creado
- El objeto de inicio adicionales procedimiento
La mayor parte de esos pasos son opcionales, y por lo general implican la identificación de una interfaz dada y decir que es el objeto de destino - este es el valor predeterminado para la personalidad del plexo, tenga en cuenta que.
Además, cada objeto puede estar unido a un administrador de ciclo de vida, que en su mayoría hace la diferencia entre un nuevo objeto y un conjunto unitario.
En mi registro en particular: La parte más difícil es en realidad el análisis sintáctico de la configuración y el arranque del contenedor. Después de eso, es probable que no note más diferencia en el rendimiento.
Después de aplicar IoC, es de esperar que su sistema ya no esté bien acoplado. ;) Sugeriría probarlo en una parte de su sistema y (si el rendimiento es crítico) benchmarking. Dudo que haya una diferencia significativa. La mayoría de los cuellos de botella implican recursos externos. – TrueWill
Ya uso IoC, solo me preguntaba si alguien tenía información sobre esto. ¡No tiene sentido refaccionar mi aplicación para un acoplamiento ajustado solo para comparar esto si alguien ya ha intentado algo similar! – UpTheCreek
si quiere la IoC más rápida del mercado, luego consulte code.google.com/p/yadic escrito en F # para .Net y scala para java. Es 3 veces más rápido que Autofac lambda – Xian