Что такое бины Spring и как их писать?
2026-03-10 02:42 Diff

Теги: spring framework, программирование на java, аннотации в spring, классы логики в spring, класс-сервис helloservice

Итак, мы в прошлой статье создали контекст Spring — каркас для нашего приложения. Теперь давайте наполним контекст классами нашей логики.

Создадим контекст

@Configuration @ComponentScan public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Main.class); } }

Предположим, что логика нашего приложения представлена сервисом HelloService (должен быть расположен или в пакете вместе с Main или ниже:

public class HelloService { public HelloService() { // Этот конструктор добавлен чисто с педагогической целью System.out.println("Creating instance of HelloService"); } public String sayHello(String name) { return "Hello, " + name + "!"; } }

И добавим одну аннотацию:

@Service public class HelloService { //... }

Запустив наше приложение, мы увидим в консоли:

> Creating instance of HelloService

И обратите внимание, что мы не писали самостоятельно new HelloService(), но экземпляр нашего сервиса был создан! Вот такой экземпляр, лежащий.

Как это возможно?

Давайте разберёмся в том, что произошло: 1. Мы написали класс-сервис HelloService, реализующий бизнес-логику. 2. У него есть конструктор по умолчанию. В принципе, экземпляр этого класса может создать и сторонний фреймворк, вроде Spring, используя рефлекшн. 3. Собственно, экземпляр HelloService и создаёт сам Spring, что мы увидели на консоли. 4. Создаёт этот экземпляр как раз тот самый AnnotationConfigApplicationContext контекст , который создали мы в методе main. 5. А как контекст нашёл этот HelloService ? Посмотрим на класс конфигурации Main (это он указан в конструкторе контекста и помечен @Configuration, поэтому он и наш класс). 6. На классе Main стоит ещё аннотация @ComponentScan. Если на каком-то классе-конфигурации присутствует такая аннотация, то Spring будет искать классы, помеченные другими аннотациями Spring. 7. Ну и как раз нашёлся класс, помеченный @Service, который и создаёт Spring, используя конструктор по умолчанию.

Конечно, нам хочется получить наш сервис, чтобы что-то сделать. Сделаем это:

@Configuration @ComponentScan public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Main.class); HelloService service = context.getBean(HelloService.class); System.out.println(service.sayHello("World")); } }

И наконец-то увидим:

> Creating instance of HelloService > Hello

Вот и всё, друзья! Узнать больше можно на курсе или, задав свой вопрос в комментарии.