Что такое бины Spring и как их писать?
Итак, мы в прошлой статье создали контекст Spring — каркас для нашего приложения. Теперь давайте наполним контекст классами нашей логики.
Создадим контекст
@Configuration @ComponentScan public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Main.class); } }
Предположим, что логика нашего приложения представлена сервисом HelloService (должен быть расположен или в пакете вместе с
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
И обратите внимание, что мы не писали самостоятельно
Как это возможно?
Давайте разберёмся в том, что произошло:
1. Мы написали класс-сервис HelloService, реализующий бизнес-логику.
2. У него есть конструктор по умолчанию. В принципе, экземпляр этого класса может создать и сторонний фреймворк, вроде Spring, используя рефлекшн.
3. Собственно, экземпляр
Конечно, нам хочется получить наш сервис, чтобы что-то сделать. Сделаем это:
@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
Вот и всё, друзья! Узнать больше можно на курсе или, задав свой вопрос в комментарии.