Spring @Component

Аннотация Spring Component используется для обозначения класса как компонента. Это означает, что фреймворк Spring автоматически обнаруживает эти классы для внедрения зависимостей, когда используется аннотационная конфигурация и сканирование classpath.

Компонент Spring

Простыми словами, компонент отвечает за определенные операции. В рамках фреймворка Spring предоставляются еще три специальные аннотации для использования при маркировке класса как компонента.

  1. Service: Обозначает, что класс предоставляет определенные услуги. Наши вспомогательные классы могут быть отмечены как сервисные классы.
  2. Repository: Эта аннотация указывает, что класс занимается операциями CRUD, обычно ее используют с реализациями DAO, работающими с таблицами базы данных.
  3. Controller: В основном используется вместе с веб-приложениями или REST-веб-сервисами, чтобы указать, что класс является фронт-контроллером и отвечает за обработку запросов пользователя и возврат соответствующего ответа.

Обратите внимание, что все эти четыре аннотации находятся в пакете org.springframework.stereotype и являются частью jar-файла spring-context. Большую часть времени наши компонентные классы будут попадать под одну из трех специализированных аннотаций, поэтому вы можете не использовать аннотацию @Component так часто.

Пример компонента Spring

Давайте создадим очень простое приложение Spring Maven, чтобы продемонстрировать использование аннотации Spring Component и то, как Spring автоматически ее обнаруживает с помощью аннотационной конфигурации и сканирования classpath. Создайте проект Maven и добавьте следующую зависимость Spring Core.

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

Этого достаточно для получения основных функций ядра фреймворка Spring. Давайте создадим простой компонентный класс и пометим его аннотацией @Component.

package com.journaldev.spring;

import org.springframework.stereotype.Component;

@Component
public class MathComponent {

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

Теперь мы можем создать аннотационно-основанный контекст Spring и получить бин MathComponent из него.

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

}

Просто запустите вышеуказанный класс как обычное java-приложение, и вы должны получить следующий вывод в консоли.

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

Вы почувствовали мощь Spring? Мы ничего не делали, чтобы внедрить наш компонент в контекст Spring. Ниже приведена структура каталогов нашего проекта примера компонента Spring. Мы также можем указать имя компонента и затем получить его из контекста Spring, используя то же самое имя.

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

Хотя я использовал аннотацию @Component с MathComponent, на самом деле это сервисный класс, и мы должны использовать аннотацию @Service. Результат останется тем же.

Вы можете проверить проект в нашем репозитории GitHub.

Ссылка: API Doc

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