Аннотация Spring Component используется для обозначения класса как компонента. Это означает, что фреймворк Spring автоматически обнаруживает эти классы для внедрения зависимостей, когда используется аннотационная конфигурация и сканирование classpath.
Компонент Spring
Простыми словами, компонент отвечает за определенные операции. В рамках фреймворка Spring предоставляются еще три специальные аннотации для использования при маркировке класса как компонента.
Service
: Обозначает, что класс предоставляет определенные услуги. Наши вспомогательные классы могут быть отмечены как сервисные классы.Repository
: Эта аннотация указывает, что класс занимается операциями CRUD, обычно ее используют с реализациями DAO, работающими с таблицами базы данных.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