Al diseñar una clase de servicio ¿debería ser singleton en java? En general, DAO se hace de forma individual, por lo que la clase de servicio de llamada también debe ser singleton.¿Debería una clase de servicio ser singleton en java?
Respuesta
Los singletons son malos, si los desarrolla. Si está utilizando inyección de dependencia, deje que el contenedor DI maneje la naturaleza singleton de su objeto de Servicio. Si no está usando inyección de dependencia, use un método estático en lugar de un singleton.
ejemplo clásico de mala:
public class HootUtility // singleton because developer was a goofball.
{
...
public void blammy(...) { ... }
public HootUtility getInstance() { ... }
}
... somewhere in the code.
HootUtility.getInstance().blammy(...); // This is silly.
mejor aplicación de las anteriores:
public class HootUtility // Not a singleton because I am not a ______. (fill in the blank as you see fit)
{
// You can limit instantiation but never prevent instantiation.
// google "java reflection" for details.
private HootUtility()
{
throw new UnsuppotedOperationException();
}
public static void blammy(...) { ... }
}
... somewhere in the code.
HootUtility.blammy(...);
Si usted tiene una interfaz de servicio que tiene una aplicación concreta, utilice un marco de inyección de dependencias para inyectar la implementación (Los marcos DI incluyen: spring y guice).
Editar: Si estuviera usando la primavera, elegiría el alcance singleton (el valor predeterminado).
En mi humilde opinión, los servicios no deberían mantener el estado y, por lo tanto, deben hacerse de forma única.
Ahora si lo haces singleton estamos alcanzando el rendimiento en caso de que la aplicación requiera una solicitud, es decir, hay un gran número de hits para la clase de servicio – Jyotirup
@Jyotirup El uso de un singleton correctamente no afectará el rendimiento (si algo lo mejora)) –
@Peter Hacerlo individualmente tendrá el efecto de que solo hay una instancia de esta clase para atender todas mis solicitudes. Así que ahora si tengo 10 solicitudes para la clase de servicio, las solicitudes se atenderán secuencialmente, por lo que habrá un retraso en el servicio ... Rendimiento alcanzado si amplío el número de solicitud – Jyotirup
Sin
En realidad, yo creo que no debe preocuparse por ello mientras que el diseño. Como @DwB mencionado DI marco debe hacer este trabajo. Además creo que no alcance ("prototipo") debe ser predeterminado y no veo nada malo si alguien lo creará por sí mismo. También ese problema se puede simplificar mediante la modularización y la separación de la interfaz de servicio y la implementación, como se dice en las mejores prácticas.
es un nuevo objeto de clase de servicio por solicitud ¿un mal enfoque? – Jyotirup
@Jyotirup No lo creo. Si están libres de estado, puede cambiar y está usando DI correctamente, puede cambiarlo fácilmente cuando lo desee. –
Diría que sería un mal enfoque del prototipo. Piensa si estás haciendo miles de solicitudes en tu aplicación web, o incluso cientos. Son cientos de instancias de una clase inicializada. Conceptualmente, si la creación de la clase y sus dependencias (por ejemplo, prototipos de dao con conexiones de db) es lo suficientemente cara, los servicios de creación de prototipos podrían llevar a una agitación más rápida, especialmente en el caso de un DDoS. Los servicios de Singletonned con un marco de DI como Spring @Autowired reducirían la asignación innecesaria de recursos – user3466773
- 1. ¿Debería el servicio WCF ser típicamente singleton o no?
- 2. clase Singleton en java
- 3. clase singleton en java API
- 4. ¿Debería mi clase de sesión ser estática?
- 5. Cómo crear una clase Singleton de proceso cruzado en Java
- 6. ¿Cómo puedo implementar una clase singleton abstracta en Java?
- 7. clase estática vs clase singleton
- 8. Singleton clase en Flex
- 9. @Singleton en Java EJB
- 10. ¿Por qué la clase de servicio Grails es Singleton?
- 11. WebLogic clúster servicio singleton
- 12. ¿Cuándo debería usar el patrón singleton en lugar de una clase estática?
- 13. DAO de JavaEE6: ¿Debería ser @Stateless o @ApplicationScoped?
- 14. ¿Quién debería ser responsable de seleccionar la clase derivada apropiada?
- 15. ¿Cuándo debería usar una clase local en Java?
- 16. ¿Debería un destructor de clase abstracta ser puro virtual?
- 17. Especifique un servicio Singleton en un servicio alojado de WCF
- 18. Establecer @property de una clase Singleton
- 19. La extensión de una clase Singleton
- 20. 'Miembro protegido en clase sellada' advertencia (una clase singleton)
- 21. ¿Debería ClassLoader ser seguro para subprocesos?
- 22. ¿Qué debería ser hadoop.tmp.dir?
- 23. Metodología de interfaces Java: ¿Debería cada clase implementar una interfaz?
- 24. ¿Cómo debería ser mi modelo?
- 25. clase estática y singleton
- 26. Java Singleton patrón
- 27. ¿Está extendiendo una clase singleton incorrecta?
- 28. Creación de una clase base Singleton en PHP 5.3
- 29. Creando una clase singleton con dispatch_once para clase hiearchy
- 30. ¿Debería el patrón de estrategia ser apátrida?
Interesante acerca de lanzar una excepción en el constructor. Personalmente, simplemente lo dejé en blanco. ¿Lo haces realmente en tu código de producción? –
Si uso Spring DI, ¿el alcance debería ser "Singleton" o "Prototype"? – Jyotirup
En general estoy de acuerdo con usted. Sin embargo, la opción # 1 es una solución razonable si el objeto (singleton) tiene que mantener el estado interno. – home