Найти в Дзене

Что такое бины Spring и как их писать?

Статья подготовлена для студентов курса «Разработчик на Spring Framework» в образовательном проекте OTUS. Итак, мы в прошлой статье создали контекст Spring — каркас для нашего приложения. Теперь давайте наполним контекст классами нашей логики. Предположим, что логика нашего приложения представлена сервисом HelloService (должен быть расположен или в пакете вместе с Main или ниже: И добавим одну аннотацию: Запустив наше приложение, мы увидим в консоли: И обратите внимание, что мы не писали самостоятельно new HelloService(), но экземпляр нашего сервиса был создан! Вот такой экземпляр, лежащий. Как это возможно? Давайте разберёмся в том, что произошло:  Конечно, нам хочется получить наш сервис, чтобы что-то сделать. Сделаем это: И наконец-то увидим: Вот и всё, друзья! Узнать больше можно на курсе или, задав свой вопрос в комментарии. Чтобы присоединиться к ближайшей группе, обязательно пройдите вступительное тестирование: ПРОЙТИ ТЕСТИРОВАНИЕ
Статья подготовлена для студентов курса «Разработчик на Spring Framework» в образовательном проекте OTUS.

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

-2

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

-3

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

-4

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

-5

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

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

Давайте разберёмся в том, что произошло: 

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

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

-6

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

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

Юрий Дворжецкий - Тренер в Luxoft Training Center, ведущий разработчик, кандидат физико-математических наук.
Юрий Дворжецкий - Тренер в Luxoft Training Center, ведущий разработчик, кандидат физико-математических наук.

Чтобы присоединиться к ближайшей группе, обязательно пройдите вступительное тестирование:
ПРОЙТИ ТЕСТИРОВАНИЕ