Puede @Component, @Repository y @Service anotaciones se utilizan indistintamente en la Primavera o proporcionan a cualquier funcionalidad particular además de actuar como una notación dispositivo?

En otras palabras, si tengo un Servicio de clase y me cambio la anotación de @Service a @Component, se comportan de la misma manera?

O hace la anotación en la que también influyen en el comportamiento y la funcionalidad de la clase?

  • Ser un desarrollador de Microsoft fondo, recuerdo a la semántica en la definición de servicios en el antiguo MS SmartClientSoftwareFactory marco (ahora un largo obsoleto marco complejo de distribución de aplicaciones de escritorio). Esa definición (muy bien documentado por la riqueza de Newman) define los servicios como apátridas objetos reutilizables, preferentemente con el ámbito de singleton, que se utilizan para realizar la lógica de negocio las operaciones de otros objetos pasados como argumentos. Tiendo a ver la Primavera de servicios de la misma manera
  • No importa!! Lo que funciona para ti 🙂 siempre he odiado este de la Primavera que siempre tienden a definir «reglas» para usted, que sólo agregar trivial valor a su aplicación. Por no hablar de que la Primavera llega con enorme pila de su propio.
  • Sprting es un marco de trabajo, definir las «reglas» para usted es su trabajo 🙂
InformationsquelleAutor Colin McCree | 2011-07-26

25 Comentarios

  1. 1369

    De La Primavera De La Documentación:

    En la Primavera de 2.0 y posteriores, el @Repository anotación es un marcador de
    cualquier clase que cumple con la función o el estereotipo (también conocido como de Datos
    Objeto de acceso o DAO) de un repositorio. Entre los usos de este marcador
    es la traducción automática de excepciones.

    Primavera 2.5 presenta más estereotipo anotaciones: @Component,
    @Service, y @Controller. @Component es un estereotipo genérico para cualquier
    Primavera-componente administrado. @Repository, @Service, y @Controller son
    especializaciones de la @Component para obtener más casos de uso específicos, para
    ejemplo, en la persistencia, el servicio, y las capas de presentación,
    respectivamente.

    Por lo tanto, se puede anotar sus clases de componentes con @Component,
    pero por proveyéndolos con @Repository, @Service, o @Controller
    en su lugar, sus clases son más adecuada para el procesamiento de las herramientas
    o de asociarse con los aspectos. Por ejemplo, estos estereotipo anotaciones
    ideal para los objetivos de la pointcuts.

    Por lo tanto, si usted está eligiendo entre el uso de @Component o @Service para
    su capa de servicio, @Service es claramente la mejor opción. Del mismo modo,
    como se indicó anteriormente, @Repository ya se utiliza como un marcador de
    automático excepción de la traducción en su capa de persistencia.

    ┌────────────┬─────────────────────────────────────────────────────┐
     Annotation  Meaning                                             
    ├────────────┼─────────────────────────────────────────────────────┤
     @Component  generic stereotype for any Spring-managed component 
     @Repository stereotype for persistence layer                    
     @Service    stereotype for service layer                        
     @Controller stereotype for presentation layer (spring-mvc)      
    └────────────┴─────────────────────────────────────────────────────┘
    • Tendría sentido agregar @Controlador (o @Componente) a un @WebServlet? No es una Primavera controlador MVC, pero conceptualmente más cercano. ¿Qué acerca de servlet filtros?
    • ¿qué significa «@Repositorio ya está soportado como un marcador automático a excepción de la traducción en su capa de persistencia.» significa?
    • Se refiere al hecho de que estas anotaciones son buenas para los objetivos de la AOP, y mientras las otras anotaciones no se define un pointcut aún, podrían hacerlo en el futuro. Por otro lado @Repositorio es ya un objetivo para un pointcut en la actualidad. Que pointcut se utiliza para la excepción de las traducciones, es decir, la traducción de la tecnología específica de las excepciones a la más genérica de Primavera-base, para evitar el acoplamiento.
    • Realmente he tratado de entender el término ‘estereotipo’, todavía no entiendo. Podría usted por favor me ayude a entender esta terminología? Es de gran ayuda y muchas gracias
    • stackoverflow.com/questions/14756486/…
    • abajo voto porque puedo leer docs mí en realidad no me digas nada que yo no sabía. Estoy tratando de averiguar cuál es la diferencia entre @Service y @Component es, es obvio para mí que hay un puesto que no he visto problemas de la inyección de @Components en lugares donde @Service obras.
    • Hay prácticamente no es una gran diferencia. Algo anotado con @Service es también un @Component (porque el @Service anotación en sí es anotado con @Component). Hasta donde yo sé, no hay nada en la Primavera de marco explícitamente hace uso del hecho de que algo es un @Service, por lo que la diferencia es realmente sólo conceptual.
    • ¿Qué puede ir mal si me anotar una capa de persistencia con @Servicio? Debo jugar el seguro de la tarjeta de @Componente si no estoy seguro?
    • Si usted anotado la capa de persistencia con @Service o @Component en lugar de @Repository, se pierde la excepción de la traducción de la funcionalidad. Si usted nunca catch específicos de la persistencia de las excepciones, o no se preocupan por el estrecho acoplamiento de, por ejemplo, la captura de Hibernación excepciones específicas, entonces usted no se preocupan por la excepción de la traducción. Del mismo modo, si usted anotar la capa de servicio con algo distinto de @Service, se pierde la capacidad de agregar el servicio de la capa específica de pointcuts. Si usted nunca hacer eso, no me importa, pero el uso correcto de la anotación es también una buena documentación
    • Excelente respuesta!!!!
    • para su consulta en el estereotipo, la razón de que esta terminología es utilizada por todas estas anotaciones están definidos en el Paquete org.springframework.stereotype. Las anotaciones que denota el papel de los tipos o métodos en la arquitectura general (en un conceptual, lugar de aplicación, nivel). Como se habla de un nivel conceptual de la vista, de ahí el nombre del paquete es adecuado y transmite el significado.

  2. 655

    Como muchas de las respuestas ya estado lo que estas anotaciones se utilizan para, aquí vamos a centrarnos en algunas pequeñas diferencias entre ellos.

    Primero el Similitud

    Primer punto que vale la pena resaltar de nuevo, es que con respecto a la exploración-auto-detección y la inyección de dependencias para BeanDefinition todas estas anotaciones (viz., @Componente, @Servicio,
    @Repositorio, @Controller) son los mismos. Podemos usar uno en su lugar
    de otro y todavía puede obtener en nuestro camino alrededor.


    Diferencias entre @Componente, @Repositorio, @Controlador y @Servicio

    @Componente

    Este es un propósito general estereotipo anotación que indica que la clase es un resorte de componente.

    Lo que es especial acerca de @Componente

    <context:component-scan> sólo analiza @Component y no se ve para @Controller, @Service y @Repository en general. Son escaneados, porque ellos mismos son anotados con @Component.

    Sólo echar un vistazo a @Controller, @Service y @Repository anotación definiciones:

    @Component
    public @interface Service {
        ….
    }

     

    @Component
    public @interface Repository {
        ….
    }

     

    @Component
    public @interface Controller {
        
    }

    Por lo tanto, no es incorrecto decir que @Controller, @Service y @Repository son tipos especiales de @Component anotación. <context:component-scan> recoge y registra sus siguientes clases como los frijoles, como si lo fueron anotados con @Component.

    Tipo especial anotaciones también se digitalizan, porque ellos mismos son anotados con @Component de anotación, lo que significa que también son @Components. Si definimos nuestro propio anotación y anotar con @Component, que también tendrá escaneada con <context:component-scan>


    @Repositorio

    Esto es para indicar que la clase define un repositorio de datos.

    Lo que es especial acerca de @Repositorio?

    Además de resaltar, que este es un Anotación de Configuración basada en, @Repository‘s trabajo es la captura de la plataforma de excepciones específicas y volver a tirar de ellos como de la Primavera unificada desactivada excepción. Para ello, estamos siempre con PersistenceExceptionTranslationPostProcessor, que estamos obligados a añadir en la Primavera del contexto de aplicación como esta:

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

    Este bean post procesador añade un asesor para cualquier bean que es anotado con @Repository de modo que cualquier específicos de la plataforma excepciones son capturados y luego re-lanzado como uno de Manantial desbordante de acceso a datos de excepciones.


    @Controlador de

    La @Controller anotación indica que una clase particular sirve el papel de un controlador. El @Controller anotación actúa como un estereotipo de la anotada de la clase, indicando su papel.

    Lo que es especial acerca de @Controlador?

    No podemos cambiar esta anotación con cualquier otro como @Service o @Repository, a pesar de que parecen mismo.
    El despachador de exploraciones de las clases anotadas con @Controller y detecta los métodos anotados con @RequestMapping anotaciones dentro de ellos. Podemos utilizar @RequestMapping en/en sólo aquellos métodos cuyas clases son anotados con @Controller y se NO trabajo con @Component, @Service, @Repository etc…

    Nota: Si una clase ya está registrado como un bean a través de cualquier método alternativo, como a través de @Bean o a través de @Component, @Service etc… anotaciones, luego @RequestMapping puede ser elegido si la clase es también anotado con @RequestMapping anotación. Pero ese es un escenario diferente.


    @Servicio

    @Service granos de mantener la lógica de negocio y llamar a métodos en el repositorio de la capa.

    Lo que es especial acerca de @Servicio?

    Aparte del hecho de que se utiliza para indicar, que es la celebración de la lógica de negocio, no hay nada notable en esta anotación; pero quién sabe, la Primavera puede añadir algo excepcional en el futuro.


    ¿Qué más?

    Parecida a la anterior, en el futuro de la Primavera puede agregar funcionalidades especiales para @Service, @Controller y @Repository basado en sus capas de convenciones. Por lo tanto, siempre es una buena idea para el respeto de la convención, y en línea con las capas.

    • ‘PersistenceExceptionTranslationPostprocessor’ será registrado automáticamente si JPA es detectado.
    • Fantástica Explicación. Has aclarado muchas de mis malos entendidos. Viniendo de una universidad en la que hemos construido todos nuestros proyectos desde la parte inferior hacia arriba, tenía dificultad para entender el porqué de la aplicación en la Primavera de trabajar aunque no está explícitamente la vinculación del programa junto a ti. Las anotaciones hacer un montón de sentido ahora, gracias!
    • Entonces, ¿qué anotación @Service significa para Hibernar(Capa de Persistencia), además de DI característica de lo que acerca de la Persistencia de la Capa de Proxy para la Obtención y Asignación de algún tipo de Entidad a los respectivos DTO? Esta capa es muy importante para el dinamismo en la capa de Persistencia. Si alguien conoce a fondo cómo afecta a JPA sería muy muy útil)))
    • Hay algunos pequeños desinformación acerca de @Controller anotación. No es necesario si la clase es anotado con @RequestMapping y frijol de esta clase se crea en forma alguna. Cualquier bean anotado con @Controller O @RequestMapping participará en Spring MVC solicitud de asignaciones. Esto puede ser útil por ejemplo para crear controladores de programación (por ejemplo, el uso de @Bean métodos) y al mismo tiempo para evitar la Primavera tratando de crear paquete de escaneo (si el paquete no puede ser excluido del análisis).
    • Usted hace un muy buen punto. Sin embargo, mi punto era que si @RequestMapping anotación es a nivel de método, a continuación, en orden a recogerlo, la clase tiene que ser anotados con @Controller anotación de lo contrario no va a ser recogido. Aunque no hay una solución que si la clase está registrada como frijol, a fin de facilitar el registro de @RequestMapping anotación, hemos de anotar la clase también con @RequestMapping. De todos modos, gracias por mencionarlo, he añadido una pequeña nota en ese punto.
    • Tienes razón, acabo de mencionar la frase «podemos utilizar @RequestMapping en/en sólo aquellos métodos cuyas clases son anotados con @Controller» no es totalmente cierto porque de las razones descritas anteriormente (hay una excepción a esta regla). Gracias a mencionar esto en la respuesta. Es realmente BUENA explicación para asegurarse.

  3. 415

    Son casi la misma – todos ellos significa que la clase es un Manantial de frijol. @Service, @Repository y @Controller están especializados @Components. Usted puede elegir para llevar a cabo acciones específicas con ellos. Por ejemplo:

    • @Controller se utilicen los beans de spring-mvc
    • @Repository frijoles son elegibles para la persistencia de la excepción de traducción

    Otra cosa es que se designan los componentes semánticamente a las diferentes capas.

    Una cosa que @Component ofrece es que puede anotar otras anotaciones con él y, a continuación, utilizar de la misma manera como @Service.

    Por ejemplo, recientemente he realizado:

    @Component
    @Scope("prototype")
    public @interface ScheduledJob {..}

    Para todas las clases anotadas con @ScheduledJob son la primavera y frijoles, además de que están registrados como cuarzo puestos de trabajo. Usted sólo tiene que proporcionar el código que se encarga de la anotación.

    • significa una primavera bean solo, es cualquier otro propósito ?
    • los frijoles son auto detectable en la primavera de contenedor. No es necesario definir bean en el archivo de configuración, será detectado automáticamente en tiempo de ejecución por parte de la Primavera.
    • Soy muy aficionado a la del genérico @Componente… sobre todo en combo con @Ámbito de aplicación( proxyMode = ScopedProxyMode.//El MODO)
  4. 351

    @Componente es equivalente a

    <bean>

    @De servicio, @Controlador, @Repositorio = {@Componente + un poco más especial funcionalidad}

    Que significa Servicio, El Controlador y el Repositorio son funcionalmente de la misma.

    Los tres anotaciones se utilizan para separar «Capas» en su aplicación,

    • Controladores acaba de hacer cosas como enviar, reenviar, servicio de llamadas a métodos, etc.
    • Servicio de Mantener la Lógica de negocio, Cálculos, etc.
    • Repositorio son los DAOs (Objetos de Acceso a Datos), acceder a la base de datos directamente.

    Ahora usted puede preguntar por qué los separan: (supongo que usted sabe AOP-Programación Orientada a Aspectos)

    Digamos que usted desea seguimiento de la Actividad de la DAO Capa. Usted va a escribir un Aspecto (Una clase) de la clase que hace el registro antes y después de cada método de DAO se invoca, que son capaces de hacer que el uso de AOP como usted tiene tres Capas distintas y no se mezclan.

    Por lo que puede hacer el registro de DAO «alrededor de», «antes» o «después» de los métodos de DAO. Usted podría hacer eso porque tenía un DAO en el primer lugar. Lo que usted acaba de lograr es la Separación de los problemas o tareas.

    Imaginar, si sólo hubiera una anotación @Controller, este componente tendrá despacho, lógica de negocio y acceso a la base de datos de todos mezclados, tan sucio código!

    Anteriormente mencionado es una situación muy común, hay muchos más casos de uso de por qué el uso de tres anotaciones.

    • Tengo una pregunta fundamental – son anotaciones utilizado por el mecanismo de resorte o que son para el programador recordar lo que esas piezas de código que hacer?
    • Son principalmente para el Programador para recordar las capas de la aplicación. Sin embargo @Respository también cuenta con un sistema automático de excepción de la función de traducción. Como cuando se produce una excepción en un @Repository normalmente hay un controlador para que la excepción, y no hay necesidad de agregar bloques try catch en el DAO de la clase. Se utiliza junto con PersistenceExceptionTranslationPostprocessor
    • puede usted por favor escribir un código de ejemplo de cómo escribir un Conjunto de puntos para todos los «@Repositorio» de la clase. O bien podemos utilizar expresiones o uso de frijol nombre pero, ¿cómo podemos decir que este consejo se aplica en todos los «@Repositorio» de clases.Yo estaba tratando de obtener la muestra de esto, pero no es capaz de encontrar.Su ayuda es muy apreciada.
    • Asimismo, mientras que las anotaciones de todos los que actualmente funcionan de la misma funcionalmente, es posible que la funcionalidad específica para un determinado atributo podría ser añadido en el futuro.
  5. 210

    En la Primavera de @Component, @Service, @Controller, y @Repository se Estereotipo de anotaciones que se utilizan para:

    @Controller: donde su solicitud asignación de la presentación de la página hecho es decir la capa de Presentación no ir a cualquier otro archivo que va directamente a @Controller de la clase y comprueba ruta solicitada en @RequestMapping anotación por escrito antes de llamadas de método si es necesario.

    @Service: Toda la lógica del negocio es de aquí, es decir, los Datos relacionados con los cálculos y todo.Esta anotación de la capa empresarial en el que nuestro usuario no llamar directamente a la persistencia método para que se llame a este método con esta anotación. Solicitará @Repositorio como por solicitud del usuario

    @Repository: Esta es la capa de Persistencia(Capa de Acceso a Datos) de la aplicación que se utiliza para obtener datos de la base de datos. es decir, toda la Base de datos relacionados con las operaciones se realizan mediante el repositorio.

    @Component – Anotar sus otros componentes (por ejemplo RESTO de recursos de las clases) con un componente estereotipo.

    Indica que con anotaciones de clase es un «componente«. Estas clases son
    considerados como candidatos para la detección automática cuando se utiliza
    anotación y configuración de la base classpath de escaneo.

    Otra clase de nivel de las anotaciones pueden ser considerados como la identificación de un
    componente así, normalmente un tipo especial de componente: por ejemplo, la
    @Repositorio de anotación o AspectJ del @Aspecto de anotación.

    ¿Cuál es la diferencia entre @Componente, @Repositorio & @Servicio de anotaciones en Primavera?

    • estas respuestas están lindo y todo, pero estoy bastante seguro de lo que la mayoría de nosotros queremos es que algunos de los ejemplos de código de las características que los componentes como servicio de ofertas que podemos, más concretamente poner en nuestra cabeza, en lugar de sólo una descripción general como «lógica de negocio» pertenece a este objeto. en caso contrario, podemos asumir «oh, eso es genial y todo, pero todavía puedo aplicar el mismo código de componentes»
    • No todo de la lógica de negocio debe ir en servicios! Servicios, en términos de la DDD, sólo debe contener la lógica del dominio que afecta a más de una entidad. Véase la respuesta de stackoverflow.com/a/41358034/238134
    • Sí, pero depende de su enfoque de los desarrolladores
    • Usted podría, por supuesto, escribir una aplicación con toda la lógica del negocio de los servicios, sino que conduciría a un anémico modelo de dominio y haría innecesario duro para hacer cumplir las restricciones y consistencia en las entidades.
    • Por supuesto depende del desarrollador de enfoque. Todo lo que hace. Si se aborda el problema de forma incorrecta, es decir, escribir lo que quieras sin estructura y decir que es «su enfoque» – que no es hacer lo correcto aunque. «Correcto» e «incorrecto», por supuesto, se utilizan como términos para describir las buenas prácticas de desarrollo de software tales como SÓLIDOS y otros principios, frente a las malas prácticas de software tales como «yo solo quiero que como esta por ahora» y similares.
    • de acuerdo. Depende del desarrollador del enfoque.
    • Si tu respuesta es un enfoque que sería bueno si usted menciona explícitamente en la respuesta de StackOverflow. Ahora parece que una definición en lugar de un enfoque. Por cierto, la Primavera es también mencionar DDD cuando se trata de la Primavera de Servicios: docs.de la primavera.io/primavera-marco/docs/actual/javadoc-api/org/…

  6. 68

    Primavera 2.5 presenta más estereotipo anotaciones: @Componente, @Servicio y @Controlador. @Componente actúa como un estereotipo genérico para cualquier Primavera-componente administrado; que, @Repositorio, @Servicio, y @Controlador de servir como especializaciones de @Componente para obtener más casos de uso específicos (por ejemplo, en la persistencia, el servicio, y las capas de presentación, respectivamente). Lo que esto significa es que usted puede anotar su componente clases con @Componente, pero por proveyéndolos con @Repositorio, @Servicio, o @Controlador lugar, las clases son más adecuada para el procesamiento de las herramientas o de asociarse con los aspectos. Por ejemplo, estos estereotipo anotaciones son blancos ideales para los pointcuts. Por supuesto, también es posible que @Repositorio, @Servicio, y @Controlador puede llevar a una semántica adicional en futuras versiones del Framework Spring. Por lo tanto, si usted está haciendo una decisión entre el uso de @Componente o @de Servicio para el servicio de la capa, @Servicio es claramente la mejor opción. Del mismo modo, como se indicó anteriormente, @Repositorio ya está soportado como un marcador automático a excepción de la traducción en su capa de persistencia.

    @Component  Indicates a auto scan component.
    @Repository  Indicates DAO component in the persistence layer.
    @Service  Indicates a Service component in the business layer.
    @Controller  Indicates a controller component in the presentation layer.

    de referencia :- La primavera de la Documentación en el Classpath de escaneo, los componentes administrados y escribir las configuraciones de uso de Java

  7. 43

    Uso de @Service y @Repository anotaciones son importantes desde la conexión de base de datos de perspectiva.

    1. Uso @Service para todo su servicio web de tipo de DB conexiones
    2. Uso @Repository para todos sus procedimientos almacenados DB conexiones

    Si no se usan las anotaciones, se puede enfrentar a cometer excepciones reemplazado por el rollback de las transacciones. Usted verá excepciones durante el estrés de la carga de la prueba que está relacionado con el rollo de la espalda JDBC transacciones.

    • Puede @Repositorio ser utilizado para RestAPI de la llamada en lugar de DB operaciones?
    • técnicamente se puede anotar servicios, los controladores y los repositorios como el de los servicios, la inyección de dependencia funcionaría de la misma. Pero, ¿por qué hacer eso? Si no funciona con la base de datos de entidades – no es un repositorio, y @Repository está diseñado específicamente para trabajar con la capa de persistencia. Si estás trabajando con la api de rest – usted está trabajando con DTO, no a DAO.
  8. 28

    Técnicamente @Controller, @Service, @Repository son todas las mismas. Todos ellos se extiende @Component.

    A partir de la Primavera de código fuente:

    Indica que con anotaciones de clase es un «componente». Estas clases son considerados como candidatos para la detección automática cuando se utiliza la anotación y configuración de la base classpath de escaneo.

    Podemos utilizar directamente @Component para todas y cada una de frijol, pero para una mejor comprensión y capacidad de mantenimiento de una aplicación de gran tamaño, utilizamos @Controller, @Service, @Repository.

    Propósito de cada anotación:

    1. @Controller -> Clases anotadas con esto, se pretende recibir una solicitud desde el lado del cliente. La primera solicitud que se viene para el Dispatcher Servlet, desde donde pasa la solicitud al controlador en particular mediante el valor de @RequestMapping anotación.
    2. @Service -> Clases anotadas con esto, se pretende manipular los datos que recibimos de el cliente o recuperar de la base de datos. Toda la manipulación de los datos debe hacerse en esta capa.
    3. @Repository -> Clases anotadas con esto, se pretende conectar con la base de datos. También puede ser considerado como DAO(Data Access Object) de la capa. Esta capa debe ser restringido a operaciones CRUD (create, retrieve, update, delete) operaciones sólo.
      Si la manipulación es necesario, los datos deben ser enviados ser enviados de nuevo a @capa de Servicio.

    Si hemos de intercambio de su lugar(uso @Repository en lugar de @Controller), nuestra aplicación funcionará bien.

    El propósito principal del uso de tres diferentes @annotations es proporcionar una mejor Modularidad de la aplicación de Empresa.

  9. 27

    @Repositorio @Servicio y @Controlador de se sirve como la especialización de @Componente de uso más concretos sobre esa base se puede reemplazar @Servicio a @Componente, pero en este caso usted suelta la especialización.

    1. **@Repository**   - Automatic exception translation in your persistence layer.
    2. **@Service**      - It indicates that the annotated class is providing a business service to other layers within the application.
  10. 26

    todas estas anotaciones son de tipo de tipo estéreo tipo de anotación,la diferencia entre estos tres anotaciones son

    • Si añadimos el @Componente, entonces se dice que el papel de la clase es una clase de componente que significa que es una clase que consiste en una cierta lógica,pero
      no saber si una clase contiene un concreto negocio o
      la persistencia o la lógica del controlador, así que no los uso directamente este
      @Componente anotación
    • Si queremos añadir la anotación @Service, entonces se dice que una función de la clase que consiste en la lógica de negocio
    • Si añadimos @Repositorio en la parte superior de la clase, a continuación, se dice que una clase que consiste en la persistencia de la lógica
    • Aquí @es un Componente de base de la anotación @Service,@Repositorio y @Controlador de anotaciones

    por ejemplo

    package com.spring.anno;
    @Service
    public class TestBean
    {
        public void m1()
        {
           //business code
        }
    }
    
    package com.spring.anno;
    @Repository
    public class TestBean
    {
        public void update()
        {
           //persistence code
        }
    }
    • siempre que añade el @Service o @Repositroy o @Controller anotación por defecto @Component anotación es ir a la existencia en la parte superior de la clase
  11. 20

    Primavera ofrece cuatro tipos diferentes de auto componente de exploración anotaciones, son @Component, @Service, @Repository y @Controller. Técnicamente, no hay ninguna diferencia entre ellos, pero cada auto componente de exploración anotación debe ser utilizado para un propósito especial y dentro de la capa.

    @Component: Es un componente básico de automóviles de escaneo de anotación, indica anotado clase es un escaneo automático de componentes.

    @Controller: Anotado de la clase indica que es un componente del controlador, y se utiliza principalmente en la capa de presentación.

    @Service: Indica anotado clase es un componente de Servicio en la capa de negocio.

    @Repository: Usted necesita para utilizar esta anotación dentro de la capa de persistencia, este actúa como repositorio de base de datos.

    Uno debe elegir un más especializados en el formulario de @Component mientras que la anotación de su clase como esta anotación puede contener el comportamiento específico de los que van adelante.

  12. 19

    Podemos responder a esta según el estándar de java

    Refiriéndose a JSR-330, que ahora es apoyado por la primavera, sólo puede utilizar @Named para definir un bean (de alguna manera @[email protected]). Así que de acuerdo a esta norma, parece que no hay ningún uso para definir los estereotipos (como @Repository, @Service, @Controller) para las categorías de frijoles.

    Pero la primavera usuario de estos diferentes anotaciones en diferentes para el uso específico, por ejemplo:

    1. Ayudar a los desarrolladores a definir una mejor categoría para el competente. Esta categorización puede ser útil en algunos casos. (Por ejemplo cuando se utiliza aspect-oriented, estos pueden ser un buen candidato para pointcuts)
    2. @Repository anotación agregar alguna funcionalidad a tu bean (algunos automático excepción de traducción a tu bean capa de persistencia).
    3. Si usted está usando spring MVC, la @RequestMapping sólo puede ser añadido a las clases que se anotan por @Controller.
    • Con respecto a su 3er punto. Eso no es cierto. Puedo agregar @RequestMapping anotación incluso a métodos en la clase de servicio así(me refiero a las clases, con la anotación @Service).
  13. 18

    Anotar otros componentes con @Componente, por ejemplo el RESTO de Recursos de las clases.

    @Component
    public class AdressComp{
        .......
        ...//some code here    
    }

    @Componente es un estereotipo genérico para cualquier Primavera componente administrado.

    @Controlador, @Servicio y @Repositorio son Especializaciones de @Componente para casos de uso específicos.

    @Componente en la Primavera

    ¿Cuál es la diferencia entre @Componente, @Repositorio & @Servicio de anotaciones en Primavera?

  14. 16

    Incluso si hemos de intercambio de @Componente o @Repositorio o @de servicio

    Que se comportan de la misma , pero es un aspecto que no será capaz de atrapar algunos excepción específica relativa a la DAO en lugar de Repositorio si utilizamos componente o @ de servicio

  15. 15

    En la Primavera de 4, la última versión:

    La @Repositorio de anotación es un marcador de cualquier clase que cumple la
    papel o estereotipo de un repositorio (también conocido como Objeto de Acceso a Datos
    o DAO). Entre los usos de este marcador es la traducción automática de
    las excepciones, tal como se describe en la Sección 20.2.2, «Excepción de la traducción».

    Primavera proporciona mayor estereotipo anotaciones: @Componente, @Servicio,
    y @Controlador. @Componente es un estereotipo genérico para cualquier
    Primavera-componente administrado. @Repositorio, @Servicio, y @Controlador
    especializaciones de @Componente para obtener más casos de uso específicos, para
    ejemplo, en la persistencia, el servicio, y las capas de presentación,
    respectivamente. Por lo tanto, se puede anotar sus clases de componentes con
    @Componente, pero por proveyéndolos con @Repositorio, @Servicio, o
    @Controlador lugar, las clases son más adecuada para
    el procesamiento de las herramientas o de asociarse con los aspectos. Por ejemplo, estos
    estereotipo anotaciones son blancos ideales para los pointcuts. También es
    es posible que @Repositorio, @Servicio, y @Controlador puede llevar a
    una semántica adicional en futuras versiones del Framework Spring. Por lo tanto,
    si usted está eligiendo entre el uso de @Componente o @de Servicio para su
    capa de servicio, @Servicio es claramente la mejor opción. Del mismo modo, como
    se indicó anteriormente, @Repositorio ya se utiliza como un marcador de
    automático excepción de la traducción en su capa de persistencia.

  16. 12

    No hay ninguna diferencia entre @Componente,@Servicio,@Controlador,@Repositorio.
    @Componente es el Genérico de anotación para representar el componente de nuestro MVC. Pero habrá varios componentes como parte de nuestra aplicación MVC como servicio de componentes de la capa, la persistencia de los componentes de la capa de presentación y capa de componentes. Así para diferenciarlos de la Primavera de personas que han dado los otros tres anotaciones también.

    Para representar componentes de la capa de persistencia : @Repositorio

    Para representar la capa de servicio de los componentes : @Servicio

    Para representar la capa de presentación de los componentes : @Controlador de

    o bien se puede usar @Componente para todos ellos.

  17. 11

    @Component es el nivel superior genérico de anotación que hace que el anotado bean para ser digitalizados y disponibles en el contenedor DI

    @Repository está especializada anotación y trae la característica de la conversión de todos los desactivada excepciones de las clases DAO de

    @Service está especializada anotación. que no traen ninguna nueva característica como la de ahora, pero aclara que la intención del grano

    @Controlador está especializada anotación que hace que el grano MVC consciente y permite el uso de más de anotación como @RequestMapping y todos

    Aquí son más detalles

  18. 10

    Un @Service citar la primavera de documentación,

    Indica que con anotaciones de clase es un «Servicio», originalmente definido
    por Domain-Driven Design (Evans, 2003) como «una operación que se ofrecen como una
    la interfaz que se encuentra solo en el modelo, sin encapsulado estado».

    También se puede indicar que una clase es una «Empresa de Servicio de Fachada» (en el
    Core J2EE patrones de sentido), o algo similar. Esta anotación es una
    propósito general estereotipo y equipos individuales pueden reducir su
    la semántica y el uso, según proceda.

    Si usted mira en el dominio de diseño orientado por eric evans,

    Un SERVICIO es una operación que se ofrecen como una interfaz que se queda solo en
    el modelo, sin encapsular estado, como ENTIDADES y OBJETOS de VALOR
    hacer. Los SERVICIOS son un patrón común en los marcos técnicos, pero que
    también se puede aplicar en la capa de dominio. El nombre del servicio se concentra en el
    relación con otros objetos. A diferencia de las ENTIDADES y OBJETOS de VALOR, se
    se define en términos de lo que puede hacer por un cliente. UN SERVICIO DE
    tiende a ser llamado para una actividad, en lugar de una entidad—un verbo en lugar
    que un sustantivo. Un SERVICIO puede tener un resumen, intencional
    definición; sólo tiene un sabor diferente de la definición de un
    objeto. Un SERVICIO debe tener una responsabilidad definida, y que
    la responsabilidad y la interfaz de cumplimiento debe ser definido como
    parte del modelo de dominio. Operación de nombres debe venir de la
    LENGUAJE OMNIPRESENTE o ser introducidos en ella. Los parámetros y resultados de
    deben ser objetos de dominio. Los SERVICIOS deben ser utilizados con prudencia y no
    permite a la franja de las ENTIDADES y OBJETOS de VALOR de todo su comportamiento.
    Pero cuando una operación es en realidad un importante concepto de dominio, de un
    Formularios de SERVICIO en una parte natural de un MODELO IMPULSADO por el DISEÑO. Declarado en el
    modelo como un SERVICIO, en lugar de como un falso objeto que no
    en realidad representan nada, la operación independiente no inducir a error
    nadie.

    y un Repository como por Eric Evans,

    Un REPOSITORIO representa todos los objetos de un cierto tipo conceptual
    conjunto (generalmente emulado). Actúa como una colección, excepto con más
    elaborar consultas de capacidad. Los objetos del tipo adecuado son
    agregar y quitar, y la maquinaria detrás del REPOSITORIO de inserciones
    ellos o los elimina de la base de datos. Esta definición reúne a un
    conjunto coherente de responsabilidades para proporcionar acceso a las raíces de
    Los AGREGADOS de principios de ciclo de vida hasta el final.

  19. 9

    @Componente: se anota una clase @Componente, se le dice a hibernate que es un Bean.

    @Repositorio: se anota una clase @Repositorio, se le dice a hibernate es un DAO clase y tratarlo como DAO clase. Significa que hace el desactivada excepciones (tirado de métodos de DAO) elegibles para la traducción en la Primavera de DataAccessException.

    @Servicio: Esto le dice a hibernate es un Servicio de clase, donde tendrá @Transactional etc Servicio de la capa de anotaciones de modo de hibernación de la trata como un componente de Servicio.

    Plus @Servicio de adelanto de @Componente. Asumir la clase de bean nombre es CustomerService, ya que no elegir XML bean de configuración de manera que anotó el frijol con @Componente para indicar como un Bean. Así, mientras que el frijol objeto CustomerService cust = (CustomerService)context.getBean("customerService"); Por defecto, la Primavera va a bajar el caso de que el primer carácter de la componente de ‘CustomerService’ a ‘customerService’. Y puede recuperar este componente con el nombre de ‘customerService’.
    Pero si usted uso de la anotación @Service para la clase de bean usted puede dar un determinado bean nombre por

    @Service("AAA")
    public class CustomerService{

    y usted puede conseguir el frijol objeto

    CustomerService cust = (CustomerService)context.getBean("AAA");
  20. 9

    Repositorio y Servicio son hijos de Componente anotación. Así, todos ellos son Componente. Repositorio y Servicio sólo expandirla.
    ¿Cómo es exactamente?
    Servicio tiene sólo las diferencias ideológicas: la usamos para los servicios. Repositorio ha determinado controlador de excepciones.

  21. 5

    Explicación de los estereotipos :

    • @Service – Anotar todas las clases de servicio con @Servicio. Esta capa se sabe de la unidad de trabajo. Toda la lógica de negocios será en las clases de Servicio. En general los métodos de la capa de servicios están cubiertos bajo la transacción. Usted puede hacer varias DAO llamadas de método de servicio, si una transacción falla todas las transacciones de reversión.
    • @Repository – Anotar todos tus clases con @Repositorio. Toda su base de datos lógica de acceso debe ser en las clases DAO.
    • @Component – Anotar sus otros componentes (por ejemplo RESTO de recursos de las clases), con el componente estereotipo.
    • @Autowired – Vamos a la Primavera de auto-alambre de frijoles en sus clases con @Autowired anotación.

    @Component es un estereotipo genérico para cualquier Primavera-componente administrado. @Repository, @Service, y @Controller son especializaciones de la @Component para obtener más casos de uso específicos, por ejemplo, en la persistencia, el servicio, y las capas de presentación, respectivamente.

    Originalmente respondió aquí.

  22. 2

    @Componente, @ Repositorio, @ Servicio, @Controlador:

    @Componente es un estereotipo genérico para los componentes gestionados por la Primavera @Repositorio, @Servicio, y @Controlador de @Componente de especializaciones para usos más específicos:

    • @Repositorio para la persistencia
    • @De servicio para los servicios y las transacciones
    • @Controlador MVC controladores de

    ¿Por qué utilizar @Repositorio, @Servicio, @Controlador sobre @Componente?
    Podemos marcar nuestras clases de componentes con @Componente, pero si en lugar de utilizar la alternativa que se adapta a la funcionalidad esperada. Nuestras clases se adaptan mejor a la funcionalidad que se espera en cada caso particular.

    Una clase, con la anotación «@Repositorio» tiene una mejor traducción y de fácil lectura y manejo de errores con org.springframework.dao.DataAccessException. Ideal para la implementación de los componentes de acceso a datos (DataAccessObject o DAO).

    Con anotaciones de clase con «@Controller» juega un rol de controlador en un Spring Web MVC aplicación

    Con anotaciones de clase con «@» Servicio juega un papel en la lógica de negocio de los servicios, ejemplo Fachada patrón DAO Manager (Fachada) y el manejo de transacciones

  23. 2

    En la primavera de marco proporciona algún tipo especial de anotaciones,llamado estereotipo anotaciones.
    Estos son los siguientes:-

    @RestController- Declare at controller level.
    @Controller  Declare at controller level.
    @Component  Declare at Bean/entity level.
    @Repository  Declare at DAO level.
    @Service  Declare at BO level.

    anteriormente declarado anotaciones son especiales porque cuando añadimos <context:component-scan> en xxx-servlet.xml archivo de la primavera ,se creará automáticamente el objeto de las clases, en las que se anotan con la anterior anotación durante contexto de creación/fase de carga.

  24. 1

    Con el fin de simplificar este ejemplo, vamos a considerar la dificultad del caso de uso, Estas anotaciones se utilizan para ser inyectada y como me dijo, literalmente, «solía ser inyectado» , que significa, si usted sabe cómo usar la Inyección de Dependencia «DI» y debe, entonces usted va a mirar siempre para estas anotaciones, y anotando las clases con estos Estéreo Tipos, se informa a la DI contenedor para escanear para estar listos para la Inyección en otros lugares, esta es la práctica de destino.

    Ahora vamos a pasar a cada uno; el primer @Servicio, Si usted está construyendo una cierta lógica para el negocio específico caso de que usted necesita para separar de que en un lugar en el que se contienen la lógica de negocio, este servicio es normal, de Clase o se puede usar como interfaz , si usted quiere, y está escrito como este

    @Service
    public class Doer {
       //Your logic 
    }
    
    //To use it in another class, suppose in Controller 
    @Controller
    public class XController {
     //You have to inject it like this 
     @Autowired 
     private Doer doer;
    }

    Todos son de la misma manera cuando se inyectan, @Repositorio es una interfaz que se aplican a la aplicación para el Repositorio de patrones Repositorio de patrones de diseño, generalmente se utiliza cuando se trata de lidiar con algunos almacén de datos o base de datos, y usted encontrará que, contiene múltiples listo aplicación para usted para manejar operaciones de base de datos; puede ser CrudRepository, JpaRepository etc.

    //For example
    public interface DoerRepository implements JpaRepository<Long, XEntity> {}

    Finalmente el @Componente, esta es la forma genérica de registro de frijoles en la Primavera, que la primavera está siempre en busca de frijol marcados con @Componente a ser registrado, entonces tanto @de Servicio y @Repositorio son casos especiales de @Componente, sin embargo, el caso de uso habitual para el componente es cuando estás haciendo algo puramente técnico, no para cubrir directo de un caso de negocio! como el formato de fechas o la entrega de peticiones especiales del mecanismo de serialización y así sucesivamente.

  25. -7
    @component
    @controller
    @Repository
    @service
    @RestController

    Estos son todos Estereotipo anotaciones.esto son útiles para la fabricación de nuestras clases como la primavera de los frijoles en el contenedor de ioc,

Dejar respuesta

Please enter your comment!
Please enter your name here