Anotação @Service do Spring

A anotação @Service do Spring é uma especialização da anotação @Component. A anotação de serviço do Spring pode ser aplicada apenas a classes. É usada para marcar a classe como um provedor de serviço.

Anotação do Spring @Service

A anotação @Service do Spring é usada com classes que fornecem algumas funcionalidades de negócios. O contexto do Spring irá autodetectar essas classes quando a configuração baseada em anotações e a varredura do classpath forem usadas.

Exemplo de @Service do Spring

Vamos criar uma aplicação Spring simples onde criaremos uma classe de serviço Spring. Crie um projeto Maven simples no Eclipse e adicione a seguinte dependência central do Spring.

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.0.6.RELEASE</version>
</dependency>

Nossa estrutura de projeto final ficará parecida com a imagem abaixo. Vamos criar uma classe de serviço.

package com.journaldev.spring;

import org.springframework.stereotype.Service;

@Service("ms")
public class MathService {

	public int add(int x, int y) {
		return x + y;
	}
	
	public int subtract(int x, int y) {
		return x - y;
	}
}

Observe que é uma classe Java simples que fornece funcionalidades para adicionar e subtrair dois inteiros. Assim, podemos chamá-la de provedor de serviço. Nós a anotamos com a anotação @Service para que o contexto do Spring possa detectá-la automaticamente e possamos obter sua instância a partir do contexto. Vamos criar uma classe principal onde iremos criar o contexto do Spring orientado por anotações e obter a instância de nossa classe de serviço.

package com.journaldev.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class SpringMainClass {

	public static void main(String[] args) {
		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
		context.scan("com.journaldev.spring");
		context.refresh();

		MathService ms = context.getBean(MathService.class);

		int add = ms.add(1, 2);
		System.out.println("Addition of 1 and 2 = " + add);

		int subtract = ms.subtract(2, 1);
		System.out.println("Subtraction of 2 and 1 = " + subtract);
		
		// fechar o contexto do Spring
		context.close();
	}

}

Basta executar a classe como uma aplicação Java, ela produzirá a seguinte saída.

Jun 05, 2018 3:02:05 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 15:02:05 IST 2018]; root of context hierarchy
Addition of 1 and 2 = 3
Subtraction of 2 and 1 = 1
Jun 05, 2018 3:02:05 PM org.springframework.context.support.AbstractApplicationContext doClose
INFO: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 15:02:05 IST 2018]; root of context hierarchy

Se você observar nossa classe MathService, definimos o nome do serviço como “ms”. Também podemos obter a instância de MathService usando este nome. A saída permanecerá a mesma neste caso. No entanto, teremos que usar conversão explícita.

MathService ms = (MathService) context.getBean("ms");

Isso é tudo para um exemplo rápido da anotação Spring @Service.

Você pode baixar o código do projeto de exemplo em nosso Repositório do GitHub.

Referência: Documentação da API

Source:
https://www.digitalocean.com/community/tutorials/spring-service-annotation