Spring @Component

A anotação Spring Component é usada para denotar uma classe como Componente. Significa que o framework Spring irá autodetectar essas classes para injeção de dependência quando a configuração baseada em anotações e a varredura do classpath são usadas.

Componente Spring

Em termos simples, um Componente é responsável por algumas operações. O framework Spring fornece outras três anotações específicas para serem usadas ao marcar uma classe como Componente.

  1. Serviço: Denota que a classe fornece alguns serviços. Nossas classes de utilitário podem ser marcadas como classes de Serviço.
  2. Repositório: Esta anotação indica que a classe lida com operações CRUD, geralmente é usada com implementações DAO que lidam com tabelas de banco de dados.
  3. Controlador: Principalmente usado com aplicações web ou serviços web REST para especificar que a classe é um controlador frontal e responsável por lidar com a solicitação do usuário e retornar uma resposta apropriada.

Observe que todas essas quatro anotações estão no pacote org.springframework.stereotype e fazem parte do jar spring-context. Na maioria das vezes, nossas classes de componente se encaixarão em uma das três anotações especializadas, então você pode não usar muito a anotação @Component.

Exemplo de Componente Spring

Vamos criar uma aplicação Maven Spring muito simples para demonstrar o uso da anotação Spring Component e como o Spring a detecta com configuração baseada em anotações e varredura do classpath. Crie um projeto Maven e adicione a seguinte dependência do Spring Core.

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

É tudo o que precisamos para obter os recursos principais do framework Spring. Vamos criar uma classe de componente simples e marcá-la com a anotação @Component.

package com.journaldev.spring;

import org.springframework.stereotype.Component;

@Component
public class MathComponent {

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

Agora podemos criar um contexto Spring baseado em anotações e obter o bean MathComponent dele.

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();

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

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

		context.close();
	}

}

Basta executar a classe acima como um aplicativo Java normal e você deve obter a seguinte saída no console.

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

Você percebeu o poder do Spring, não precisamos fazer nada para injetar nosso componente no contexto do Spring. A imagem abaixo mostra a estrutura de diretórios do projeto de exemplo de Componente Spring. Também podemos especificar o nome do componente e então obtê-lo do contexto do Spring usando o mesmo nome.

@Component("mc")
public class MathComponent {
}
MathComponent ms = (MathComponent) context.getBean("mc");

Embora eu tenha usado a anotação @Component com MathComponent, na verdade é uma classe de serviço e devemos usar a anotação @Service. O resultado ainda será o mesmo.

Você pode verificar o projeto em nosso Repositório GitHub.

Referência: Documentação da API

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