Внедрение на основе XML весной

Внедрение на основе XML весной

1. Вступление

В этом базовом руководстве мы узнаем, как выполнить простую настройку bean-компонентов на основе XML с помощью Spring Framework.

2. обзор

Начнем с добавления зависимости библиотеки Spring вpom.xml:


    org.springframework
    spring-context
    5.1.4.RELEASE

Последнюю версию зависимости Spring можно найтиhere.

3. Внедрение зависимостей - обзор

Dependency injection - это метод, при котором зависимости объекта предоставляются внешними контейнерами.

Допустим, у нас есть класс приложения, зависящий от службы, которая фактически обрабатывает бизнес-логику:

public class IndexApp {
    private IService service;
    // standard constructors/getters/setters
}

Теперь предположим, чтоIService - это интерфейс:

public interface IService {
    public String serve();
}

Этот интерфейс может иметь несколько реализаций.

Давайте быстро рассмотрим одну из возможных реализаций:

public class IndexService implements IService {
    @Override
    public String serve() {
        return "Hello World";
    }
}

ЗдесьIndexApp - это компонент высокого уровня, который зависит от компонента низкого уровня, называемогоIService.

По сути, мы отделяемIndexApp от конкретной реализацииIService, которая может варьироваться в зависимости от различных факторов.

4. Внедрение зависимостей - в действии

Давайте посмотрим, как мы можем внедрить зависимость.

4.1. Использование свойств

Давайте посмотрим, как мы можем связать зависимости вместе с помощью конфигурации на основе XML:




    

Как видно, мы создаем экземплярIndexService и присваиваем ему идентификатор. По умолчанию бин является синглтоном. Также мы создаем экземплярIndexApp.

Внутри этого bean-компонента мы внедряем другой bean-компонент с помощью метода установки.

4.2. Использование конструктора

Вместо внедрения bean-компонента с помощью метода setter, мы можем внедрить зависимость, используя конструктор:


    

4.3. Использование статической фабрики

Мы также можем ввести боб, возвращенный фабрикой. Давайте создадим простую фабрику, которая возвращает экземплярIService на основе предоставленного числа:

public class StaticServiceFactory {
    public static IService getNumber(int number) {
        // ...
    }
}

Теперь давайте посмотрим, как мы можем использовать вышеуказанную реализацию для внедрения bean-компонента вIndexApp с использованием конфигурации на основе XML:


    



    

В приведенном выше примере мы вызываем статический методgetService с использованиемfactory-method для создания bean-компонента с идентификаторомmessageService, который мы вводим вIndexApp..

4.4. Используя фабричный метод

Давайте рассмотрим фабрику экземпляров, которая возвращает экземплярIService на основе предоставленного числа. На этот раз метод не является статичным:

public class InstanceServiceFactory {
    public IService getNumber(int number) {
        // ...
    }
}

Теперь давайте посмотрим, как мы можем использовать вышеуказанную реализацию для внедрения bean-компонента вIndexApp с использованием конфигурации XML:



    


    

В приведенном выше примере мы вызываем методgetService для экземпляраInstanceServiceFactory, используяfactory-method для создания bean-компонента с идентификаторомmessageService, который мы вводим вIndexAppс.

5. тестирование

Вот как мы можем получить доступ к настроенным bean-компонентам:

@Test
public void whenGetBeans_returnsBean() {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("...");
    IndexApp indexApp = applicationContext.getBean("indexApp", IndexApp.class);
    assertNotNull(indexApp);
}

6. Заключение

В этом кратком руководстве мы проиллюстрировали примеры того, как мы можем внедрить зависимость, используя конфигурацию на основе XML, используя Spring Framework.

Реализацию этих примеров можно найти вthe GitHub project - это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.