Как обеспечить доступ к бинам для классов, не являющихся точкой входа в приложение (и бинами)?

Из ответов на вопрос Как убрать приведение типа из конструкции фреймворка Spring applicationContext.getBean? я узнал, что для соблюдения инверсии контроля использовать applicationContext можно только в конфигурационных классах Spring, а также в точке входа, например:

public class EntryPoint {
    public static void main (String[] args) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ApplicationContext.class);
        FilesManager filesManager = applicationContext.getBean(FilesManager.class);
        PeopleGateway peopleGateway = applicationContext.getBean(PeopleGateway.class);

        filesManager.initializeUserFiles();
        GUI_Service.startGUI();
    }
}

Каким же образом принято обеспечивать доступ к бинам из всех остальных классов? Например, в данном приложении GUI_Service будет вызывать у peopleGateway разные методы - getAllPeolple, getPersonByID и так далее. К контексту GUI_Service обращаться вроде как не должен. А в точке входа peopleGateway пока что и вовсе не нужен.

Обычный способ - передать peopleGateway либо через конструктор GUI_Service, либо через какой-нибудь инициализирующий метод. Что даёт Spring?

GUI_Service на данный момент пока не является бином.


Ответы (2 шт):

Автор решения: alex

Для доступа к бинам используется аннотация @Autowired. Её можно вешать на поле или геттер.

→ Ссылка
Автор решения: Ilya Yarets

В Спринге связать бины можно различными способами:

1) Связывание над сеттерами аннотацией @Autowired над ней.

2) Через поле и аннотацию, которая подтянет бин в классе AppConfig. Данный метод обозначен аннотацией @Bean, что автоматически подтягивает аргументы в метод.

3) Так же возможно конструировать через связывание по @Autowired с помощью конструктора. Необоходимо пометить все классы, которые являются бинами аннотацией @Component.Чтобы Спринг видел все бины, в классе AppConfig была добавлена аннотация @ComponentScan.

Ниже я представил пример 3-х различных вариантов связывания бинов. В практическом примере можно ознакомиться более детально.

https://github.com/ilya-yarets/2.1.4.spring-types-of-wiring

→ Ссылка