Главная » Spring » Использование  выражений в аннотациях внедрения зависимостей Spring

0

Помимо внедрения ссылок на компоненты с помощью аннотаций автоматического связывания, может появиться желание использо- вать аннотации для внедрения простых значений. В версии Spring

3.0 появилась новая аннотация @Value, позволяющая внедрять прос- тые значения таких типов, как int, boolean и String.

Аннотация @Value проста в использовании, но, как будет показа- но чуть ниже, она обладает широкими возможностями. Ее приме- нение заключается в том, чтобы добавить аннотацию @Value перед свойством, методом или параметром метода и передать ей строку с выражением, результат которого должен быть внедрен. Например:

@Value("Eruption") private  String  song;

Здесь в строковое свойство внедряется обычное строковое значе- ние. Но строковый параметр аннотации @Value в действительности является выражением, которое может возвращать значение любого типа, благодаря чему аннотация @Value может применяться к свой- ствам любых типов.

Внедрение жестко определенных значений с использованием ан- нотации @Value само по себе малоинтересно. Если заранее известные значения можно присваивать непосредственно в программном коде Java, почему бы тогда не отказаться от аннотации @Value и не при- своить требуемое значение свойству напрямую? В данном примере аннотация @Value выглядит как излишество.

Как оказывается, внедрение простых значений не является конь- ком аннотации @Value. Полная ее мощь заключается в возможности использовать выражения на языке SpEL. Напомню, что язык SpEL позволяет динамически вычислять сложные выражения во время выполнения и использовать полученные значения для внедрения в свойства компонентов. Это делает аннотацию @Value мощным ин- струментом внедрения.

Например, вместо внедрения жестко определенного значения в свойство song попробуем задействовать выражение на языке SpEL, чтобы внедрить значение системного свойства:

@Value("#{systemProperties.myFavoriteSong}") private  String  song;

В этом примере аннотация @Value показала свои возможности. Это не только инструмент доставки статических значений, это еще и эф- фективный способ внедрения значений динамически вычисляемых выражений на языке SpEL.

Как видите, автоматическое связывание – мощный прием. Если позволить фреймворку Spring автоматически связывать компонен-

ты, это поможет уменьшить размеры XML-файлов конфигурации приложения. Более того, автоматическое связывание позволяет еще больше ослабить связанность компонентов, отделяя объявления компонентов друг от друга.

А теперь познакомимся с механизмом автоматического определе- ния компонентов, чтобы увидеть, как фреймворк Spring может не только связывать компоненты, но и автоматически определять, ка- кие компоненты должны быть зарегистрированы в контексте Spring.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии