2012-01-19 10 views

Respuesta

4

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.

2

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.

0

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.

0

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.

Cuestiones relacionadas