As anotações @Componente',
@Repositório' e `@Serviço' podem ser utilizadas de forma intercambiável na Primavera ou fornecem alguma funcionalidade em particular além de funcionarem como um dispositivo de notação?
Em outras palavras, se eu tiver uma classe de Serviço e eu mudar a anotação de @Serviço' para
@Componente', ela ainda se comportará da mesma forma?
Ou a anotação também influencia o comportamento e a funcionalidade da classe?
Na primavera 2.0 e posteriores, a anotação
@Repositório
é um marcador para qualquer classe que cumpra a função ou estereótipo (também conhecido como Dados Access Object ou DAO) de um repositório. Entre os usos deste marcador, destacam-se é a tradução automática das excepções.a Primavera 2.5 introduz outras anotações estereotipadas:
@Componente
,@Service
, e@Controller
.@Component
é um estereótipo genérico para qualquer componente gerido pela mola.@Repositório
,@Serviço
, e@Controlador
são especializações de@Componente
para casos de utilização mais específicos, para exemplo, nas camadas de persistência, serviço, e apresentação, respectivamente.Portanto, você pode anotar suas classes de componentes com
@Component', mas anotando-os com
@Repositório,
@Serviço, ou
@Controlador`. em vez disso, as suas aulas são mais adequadas para o processamento por ferramentas ou associar com aspectos. Por exemplo, estas anotações estereotipadas fazer alvos ideais para cortes pontiagudos.Assim, se você estiver escolhendo entre utilizar
@Component
ou@Service
para a sua camada de serviço,@Service
é claramente a melhor escolha. Da mesma forma, como acima indicado,@Repository
já é suportado como um marcador para tradução automática de exceções na sua camada de persistência.
┌────────────┬─────────────────────────────────────────────────────┐
│ 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) │
└────────────┴─────────────────────────────────────────────────────┘
Eles são quase os mesmos - todos eles significam que a classe é um feijão de primavera. Os @Service
, @Repository
e @Controller
são especializados @Component
s. Você pode escolher executar ações específicas com eles. Por exemplo, @Controller
s:
Outra coisa é que você designa semanticamente os componentes para diferentes camadas.
Uma coisa que @Componente
oferece é que você pode anotar outras anotações com ele, e então utilizá-las da mesma forma que @Serviço
.
Por exemplo, recentemente eu fiz:
@Component
@Scope("prototype")
public @interface ScheduledJob {..}
Portanto, todas as aulas anotadas com @SchechedJob
são feijões de primavera e, além disso, são registradas como empregos de quartzo. Você só tem que fornecer o código que lida com a anotação específica.
A utilização de anotações @Serviço
e @Repositório
são importantes do ponto de vista da conexão com banco de dados.
@Service
para todos os seus tipos de ligações de BD de serviço web@Repositório
para todas as suas conexões DB proc armazenadasSe você não usar as anotações apropriadas, você pode enfrentar exceções de compromisso substituídas por transações de rollback. Você verá exceções durante o teste de carga de tensão que está relacionado às transações de rollback do JDBC.