java - example - spring framework
Ventajas de usar estereotipos de primavera? (2)
Estoy desarrollando una aplicación web usando spring-mvc.
Ahora los estereotipos @Controller, @Service y @Repository están disponibles.
Encontré @Controller particularmente útil, especialmente porque estoy usando
<context:component-scan base-package="my.cool.controller"/>
Ahora, con respecto a @Service y @Repository, hasta ahora se parece a
- Las excepciones se manejan mejor si la clase está anotada con el estereotipo correcto, vale, eso es una ventaja que reconozco
- Podría utilizar el componente-scan para servicios y DAO / repositorios, sin embargo, no me gusta la idea de usar el componente-scan, ya que ralentiza el tiempo de inicio de la aplicación, y esa es una característica clave para mí (incluso si solo es 1 segundo y vuelvo a desplegar una vez por semana)
Entonces, aparte de las mejores excepciones, ¿hay alguna otra ventaja? ¿Anotar las clases tiene un impacto en el rendimiento?
La exploración de componentes le evita definir cada bean manualmente a través de la configuración xml o java.
Múltiples tipos de estéreo están ahí para definir capas como capa de servicio, capa de datos, etc. También, en función de diferentes tipos de estéreo, si desea hacer algo específico, puede hacerlo.
Explicación de los estereotipos:
-
@Service
:@Service
todas sus clases de servicio con @Service. Esta capa conoce la unidad de trabajo. Toda su lógica comercial estará en clases de servicio. En general, los métodos de capa de servicio están cubiertos en la transacción. Puede realizar múltiples llamadas DAO desde el método de servicio; si una transacción falla, todas las transacciones deberían revertirse. -
@Repository
:@Repository
todas tus clases DAO con @Repository. Toda su lógica de acceso a la base de datos debe estar en clases DAO. -
@Component
:@Component
tus otros componentes (por ejemplo, clases de recursos REST) con estereotipo de componente. -
@Autowired
- Permita que Spring conecte automáticamente otros beans a sus clases usando @Autowired annotation.
@Component
es un estereotipo genérico para cualquier componente gestionado por Spring. @Repository
, @Service
y @Controller
son especializaciones de @Component
para casos de uso más específicos, por ejemplo, en las capas de persistencia, servicio y presentación, respectivamente.
Razones para usarlos:
- La principal ventaja de usar @Repository o @Service sobre @Component es que es fácil escribir un punto de corte AOP que se dirija, por ejemplo, a todas las clases anotadas con @Repository.
- No tiene que escribir definiciones de
bean
en el archivo xml de contexto. En su lugar, anota las clases y úsalas mediante el autoenvío. - Las anotaciones especializadas ayudan a demarcar claramente las capas de aplicación (en una aplicación estándar de 3 niveles).
Ahora, el impacto práctico del uso de beans y anotaciones context xml es el mismo. La exploración de componentes es un poco más costosa (cuando busca @Service, @Component). Las anotaciones se "analizan" con la reflexión, el xml - con un analizador xml. Pero, como dijiste, es el tiempo de inicio, solo ocurre una vez. Y en una máquina moderada, comienza bastante rápido incluso con anotaciones.