Creo que tanto @Component
como @Service
se pueden usar para detectar bean automáticamente, cualquiera me puede mostrar la diferencia entre esas dos anotaciones?Para la autodetección de primavera, ¿cuál es la diferencia entre el componente y el servicio?
Respuesta
La diferencia básica entre ambas anotaciones es que @Service
es una especialización de @Component
.
Véase también la primavera documentation para @Service
:
Indica que una clase anotada es un "servicio" (por ejemplo, una fachada de Servicio al ).
Esta anotación sirve como una especialización de @Component, lo que permite que las clases de implementación se detecten automáticamente a través del escaneado de classpath.
una especialización de componente es también un @Repository
y una @Controller
Más información se puede encontrar, por ejemplo, here.
Desde y hasta Spring 3.1, no hay diferencia en la forma en que Spring los maneja. The docs say this, but in a rather obscure way:
Primavera 2.5 introduce más anotaciones estereotipo:
@Component
,@Service
, y@Controller
.@Component
es un estereotipo genérico para cualquier componente administrado 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. Por lo tanto, puede anotar sus clases de componente con@Component
, pero al anotarlas con@Repository
,@Service
o@Controller
, sus clases son más adecuadas para el procesamiento por herramientas o la asociación con aspectos. Por ejemplo, estas anotaciones de estereotipo son objetivos ideales para los puntos de corte. También es posible que@Repository
,@Service
y@Controller
puedan llevar semántica adicional en futuras versiones de Spring Framework. Por lo tanto, si elige entre usar@Component
o@Service
para su capa de servicio,@Service
es claramente la mejor opción. Del mismo modo, como se indicó anteriormente,@Repository
ya es compatible como un marcador para la traducción automática de excepciones en su capa de persistencia.
Así que por ahora, @Service
serán tratados en la primavera de exactamente el mismo que @Component
, pero @Service
se puede considerar una forma de documentación.
No estoy seguro de por qué @Service
se incluyó en Spring 2.5 en absoluto, ya que no parece tener ningún propósito real.
verificación del código fuente
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Service { /** * The value may indicate a suggestion for a logical component name, * to be turned into a Spring bean in case of an autodetected component. * @return the suggested component name, if any */ String value() default ""; }
anotación servicio es a su vez anotado con @Component. No hay mucho en la diferencia.
aquí es la explicación de por qué necesitamos esta especialización ...
En Spring 2.0 y más tarde, la anotación @Repository es un marcador para cualquier clase que cumple el papel o el estereotipo (también conocido como acceso a datos Object o DAO) de un repositorio. Entre los usos de este marcador está la traducción automática de excepciones.
Spring 2.5 introduce más anotaciones de estereotipos: @Component, @Service y @Controller. @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.
Por lo tanto, puede anotar sus clases de componentes con @Component, pero al anotarlas con @Repository, @Service o @Controller, sus clases son más adecuadas para el procesamiento por herramientas o la asociación con aspectos. Por ejemplo, estas anotaciones de estereotipo son objetivos ideales para los puntos de corte.
Por lo tanto, si elige entre usar @Component o @Service para su capa de servicio, @Service es claramente la mejor opción. Del mismo modo, como se indicó anteriormente, @Repository ya es compatible como un marcador para la traducción automática de excepciones en su capa de persistencia.
- 1. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 2. ¿Cuál es la diferencia entre el servicio web ordinario y el servicio web basado en jabón?
- 3. ¿Cuál es la diferencia entre la recarga del servicio y el reinicio del servicio?
- 4. ¿Cuál es la diferencia entre un controlador y un servicio?
- 5. ¿Cuál es la diferencia entre el NSImage y el UIImage?
- 6. ¿Cuál es la diferencia entre la tubería y el zócalo?
- 7. ¿Cuál es la diferencia entre el colado y la coerción?
- 8. ¿Cuál es la diferencia entre el mango y el hilo?
- 9. ¿cuál es la diferencia entre el objetivo y el proyecto?
- 10. Backbone.Js - ¿Cuál es la diferencia entre el y $ el?
- 11. ¿Cuál es la diferencia entre el JSP y el JSTL?
- 12. ¿Cuál es la diferencia entre el tenedor y el hilo?
- 13. ¿cuál es la diferencia entre el material y la textura?
- 14. ¿Cuál es la diferencia entre el casting y la conversión?
- 15. ¿Cuál es la diferencia entre el marco y la arquitectura?
- 16. ¿Cuál es la diferencia entre el
- 17. Cuál es la diferencia entre la llamada a procedimiento remoto y el servicio web
- 18. ¿Cuál es la diferencia entre el servicio web y la comunicación remota?
- 19. ¿Cuál es la diferencia entre el cifrado GET y POST?
- 20. ¿Cuál es la diferencia entre el formato OMF y COFF?
- 21. ¿Cuál es la diferencia entre VBScript's y el operador &?
- 22. ¿Cuál es la diferencia entre el nuevo operador y Class.newInstance()?
- 23. cuál es la diferencia entre las plantillas y el polimorfismo
- 24. ¿Cuál es la diferencia entre el enlace primero y reciente?
- 25. ¿Cuál es la diferencia entre: = y + = en el archivo make?
- 26. ¿Cuál es la diferencia entre setattr() y el objeto .__ setattr __()?
- 27. ¿cuál es la diferencia entre:.! y: r !?
- 28. ¿cuál es la diferencia entre net.tcp y el protocolo TCP?
- 29. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 30. ¿Cuál es la diferencia entre el cifrado SHA y AES?