Menciona que su servicio tiene dependencias.
Si alguna dependencia en su gráfico de dependencias no está completamente sin estado, o si una de sus dependencias en su gráfico de dependencias debería modificarse para que ya no sea tan completamente sin estado, entonces todo el sistema fallará. Y los errores que obtenga probablemente serán muy crípticos, por lo que será difícil descubrir el problema.
Digamos que eres un equipo de desarrolladores que trabajan en el proyecto. Es muy poco probable que todos y cada uno de ellos sepan que la configuración de IOC requiere que todos estos componentes permanezcan completamente sin estado. Pueden saberlo ahora, pero esa conciencia se desvanecerá con el tiempo. Y si contratas a un chico nuevo, él / ella tampoco se dará cuenta.
Por lo tanto, definitivamente configuraría el contenedor IOC para devolver una nueva instancia cada vez. Es simplemente la opción más segura, en mi humilde opinión.
Ciertamente no me preocuparía por los recursos. El costo de la construcción y la recolección de basura de los objetos es probablemente insignificante en comparación con, por ejemplo, una simple búsqueda en la base de datos.
La instancia única era el comportamiento predeterminado de Spring por una razón: una sola instancia de un servicio sin estado consumirá menos recursos que la creación constante y la recolección de basura de muchas instancias. Además, no existe un peligro real al compartir un servicio sin estado, pero existen algunos problemas de escalabilidad reales al crear varias instancias de un servicio.
Entonces, diría que la instancia única probablemente sea tu amiga.
fuente
Sin más contexto, creo que realmente no importa.
Puede obtener los beneficios de los objetos de corta duración de una sola instancia, si esa instancia simplemente crea los objetos de corta duración para cada llamada, y puede obtener los beneficios de una sola instancia de muchos objetos de corta duración, si esos simplemente actúan como contrapesos .
Por supuesto, es innecesariamente ruidoso configurarlo de una manera, solo delegarlo a lo contrario. Así que supongo que debería tener una suposición, si es probable que agregue algún estado, y si es así, si será un estado persistente / global (por ejemplo, al agregar un caché) o un estado local de corta duración.
fuente