Внедрение на основе 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, поэтому его должно быть легко импортировать и запускать как есть.