Узнайте, как привязать бины Spring с использованием XML и классов Java
Для подключения компонентов Spring используются два подхода: конфигурация XML и класс Java. Привязка может быть выполнена вручную путем настройки XML- файлов или с помощью классов Java. Также можно позволить Spring выполнить привязку на основе нескольких спецификаций.
Основная цель этой статьи – показать, как компоненты Spring могут быть привязаны с помощью двух упомянутых выше подходов.
Для чего используется фреймворк Spring?
Spring Framework - это одна из популярных сред разработки приложений, которая имеет следующие преимущества:
- Использование только нужных модулей.
Spring предлагает множество различных пакетов и классов. А также позволяет использовать только нужные из них. - Возможность применения других технологий.
Spring использует другие технологии: фреймворки логов, ORM, таймеры Quartz, JEE и JDK и другие.
- Компактность
Контейнер Spring легче по сравнению с контейнером EJB. Он развертывать приложения на основе Spring на маломощных компьютерах. - Гибкая система управления транзакциями
Интерфейс управления транзакциями Spring может использоваться обработки как глобальных транзакций (Java Transaction API), так и локальных транзакций (в одной базе данных).
Что такое привязка бинов?
Когда запускается программное приложение, совместно работают сразу несколько объектов (бинов). Также они могут использоваться независимо от других объектов.
Чтобы заставить бины работать вместе, их связывают через введение зависимостей в Spring (привязки). Когда запускается приложение на основе Spring, контекст приложения загружает определения компонентов или объектов из файла конфигурации и связывает их вместе.
Существует два подхода к привязке bean-компонентов в среде Spring:
- Привязка через XML.
- Привязка через классы Java.
Что такое автоматическая привязка?
Существует два способа привязки bean-компонентов в среде Spring:
- Вручную, объявив bean-компоненты с помощью Dependency Injection (DI)
- Позволить контейнеру Spring самостоятельно связать необходимые компоненты.
Последний способ известен как автоматическая привязка. При этом контейнеру Spring нужно указать, как он должен их связывать:
- byName: контейнер Spring ищет бины, для которых в файле конфигурации XML для атрибута auto wire установлено значение byName.
- byType: контейнер ищет бины, для которых в файле конфигурации XML для атрибута auto wire установлено значение byType.
- constructor: выполняется поиск бинов, для которых для атрибута auto wire установлено значение constructor.
- autodetect: способ автоматического подключения - через конструктор. Если он не работает, автоматическое подключение выполняется через параметр byType.
Что такое привязка через Java и XML?
Подключение bean-компонентов Spring может выполняться через классы Java и с помощью конфигурации XML. В этом разделе мы рассмотрим оба варианта:
XML: Подключение выполняется в файле конфигурации XML. Он содержит определения bean-компонентов. Когда запускается приложение, бины вызываются с помощью Dependency Injection (DI). В файле конфигурации необходимо объявить элемент и использовать элементы <constructor-arg>, <property>.
Классы Java: Необходимо создать класс Spring Configuration и аннотировать класс @Configuration. Класс @Configuration сообщает Spring, что bean-компоненты, которые должны быть подключены и настроены в этом классе.
Настройка среды
Настройка среды для разработки приложений Spring, включает в себя всего три основных шага.
- Настройка Java Development Kit
Загрузите JDKс официального сайта Oracle, а затем установите и настройте его. После этого необходимо задать переменные среды PATH и JAVA_HOME. - Настройка Eclipse IDE
Eclipse можно скачать с официального сайта. После завершения загрузки распакуйте двоичные файлы, а затем установите PATH. - Настройка библиотек Spring
Spring можно скачать здесь. Важно правильно установить CLASSPATH.
Пример приложения
Мы разработаем два приложения. В первом бины будут подключаться с использованием аннотаций, а во втором приложении – с помощью XML-файла конфигурации.
Подключение через аннотации - у нас будет три класса Java, как показано ниже.
Листинг 1: Класс бина
package com.dashboardapp.beanwire;
public class BeanWire {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Message is : " + message);
}
}
В следующем классе для информирования контейнера Spring о том, что будет загружен beanWire, используются две аннотации. Аннотация @Configuration сообщает контейнеру Spring, что этот класс является источником определений бина.
Аннотация @Bean информирует среду Spring, что метод вернет объект, который должен быть зарегистрирован как компонент в контексте приложения.
Листинг 2: Класс конфигурации Bean с аннотациями
package com.dashboardapp.beanwire;
import org.springframework.context.annotation.*;
@Configuration
public class BeanWireConfig {
@Bean
public BeanWire beanwire(){
return new BeanWire();
}
}
Ниже приведен последний класс для запуска приложения.
Листинг 3: Основной класс для запуска приложения
package com.dashboardapp.beanwire;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;
public class BeanWireMain {
public static void main(String[] args) {
ApplicationContext ctx =
new AnnotationConfigApplicationContext(BeanWireConfig.class);
BeanWire beanwire = ctx.getBean(BeanWire.class);
beanwire.setMessage("Hello Bean. You are wired by annotation.....!");
beanwire.getMessage();
}
}
Когда эта Java-программа будет выполнена, она выдаст следующий результат.

Теперь рассмотрим, как привязывать бины через XML-файл.
Привязка через XML-файл: У нас будет два Java-файла и один XML-файл конфигурации.
Java-класс бина практически аналогичен предыдущему.
Листинг 1: Файл бина
package com.dashboardapp.beanwire;
public class BeanWireXML {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Message is : " + message);
}
}
Это XML-файл конфигурации.
Листинг 2: Конфигурационный XML-файл.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<bean id="beanwire" class="com.dashboardapp.beanwire.BeanWireXML">
</bean>
</beans>

Это файл для получения компонента из XML-файла конфигурации и вызова методов.
Листинг 3: Основной Java-файл.
Package com.dashboardapp.beanwire;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class BeanWireXMLMain {
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext(
"WebContent/WEB-INF/appConfig.xml");
BeanWireXML beanwireobj = (BeanWireXML)context.getBean("beanwire");
beanwireobj.setMessage("Hello Bean. You are wired by XML config.....!");
beanwireobj.getMessage();
}
}
Запустите приложение, и оно выдаст следующий результат.

Заключение
Автоматическая привязка требует осторожности. Не все привязки могут выполняться с помощью автоматического подключения. Оно не подходит для сложных привязок, и это следует учитывать.