Рубрики
Без рубрики

Инъекция на основе XML весной

Узнайте, как выполнить инъекцию на основе XML с помощью Spring.

Автор оригинала: baeldung.

1. введение

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

2. Обзор

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


    org.springframework
    spring-context
    5.1.4.RELEASE         

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

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

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

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

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

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

public interface IService {
    public String serve();
}

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

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

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

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

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

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

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

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

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


     

    
    

Как видно, мы создаем экземпляр Index Service и присваиваем ему идентификатор. По умолчанию компонент является одноэлементным. Кроме того, мы создаем экземпляр Index App .

Внутри этого боба мы вводим другой боб, используя метод сеттера.

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

Вместо того, чтобы вводить компонент с помощью метода setter, мы можем ввести зависимость с помощью конструктора:


    
    

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

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

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

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


    
   
  

    

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

4.4. Использование Заводского Метода

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

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

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



    
  

    

В приведенном выше примере мы вызываем метод GetService на экземпляре Instance Service Factory , используя factory-method для создания компонента с идентификатором MessageService , который мы вводим в IndexApp .

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

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

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

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

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

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