Главная » Spring » Дополнительные способы связывания компонентов Spring

0

Большинство людей имеют, по крайней мере, один ящик (а иног- да даже целый шкаф или кабинет) в своем доме, где хранятся раз- ные мелочи. Часто его называют просто «выдвижной ящик», но там может оказаться довольно много разных весьма полезных штуковин. В подобном месте всегда найдутся такие вещи, как рулетка, зажи- мы, ручки, карандаши, кнопки, несколько запасных батарей и т. д. Обычно эти предметы не используются каждый день, но вы точно знаете, что если отключат электричество, вы пороетесь в этом ящи- ке и обязательно найдете батареи, которые вставите в ваш фонарь.

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

Однако в данной главе мы немного пороемся в выдвижном ящике Spring контейнеров. Хотя темы, охватываемые здесь, вполне прак- тичны для удовлетворения потребностей, они почти не найдут тако- го же применения, как те, что обсуждались в главе 2. Не часто будет необходимо заменить метод в компоненте или создать компонент, который знает свое имя. И не в каждом проекте потребуется вводить класс Ruby в Java-приложение, основанное на Spring.

Так как эта глава касается довольно необычных возможностей Spring, вы можете просто пропустить ее и перейти к знакомству с аспектно-ориентированными функциями Spring в главе 4. Но эта глава всегда будет к вашим услугам, ожидая, когда в ней возникнет потребность. И если вы окажетесь тут, то увидите, как можно свя-

зывать компоненты разными экстремальными способами. А начнем мы ее с того, как создать и расширить абстрактные компоненты.

Объявление родителей и потомков компонентов

Одной из основ объектно-ориентированного программирования является возможность создания класса, расширяющего другой класс. Новый класс наследует все свойства и методы родительского класса, но он в состоянии добавить новые свойства и методы и даже пере- определить свойства и методы родителя. Если вы читаете эту книгу, то наверняка имеете опыт создания программ на языке Java и под- классы для вас отнюдь не новость. Но знаете ли вы, что компоненты в фреймворке Spring также могут быть «подкомпонентами» других компонентов?

Объявление <bean> в Spring обычно содержит атрибут class, что- бы указать тип компонента, и ноль или более элементов <property>, внедряющих свои значения в свойства компонента. Абсолютно все, что касается компонента, объявляется в одном месте: в нем самом, в его объявлении <bean>.

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

Для обеспечения  «наследования»  определений  компонентов в элементе <bean> могут указываться два специальных атрибута:

#  parent  – определяет идентификатор компонента, который бу-

дет предком компонента с атрибутом parent. Атрибут parent

указывает, что компонент расширяет Java-класс;

# abstract – если имеет значение true, указывает, что компонент объявлен как абстрактный. То есть экземпляр такого компо- нента никогда не должен создаваться фреймворком Spring.

Чтобы показать возможности подкомпонентов, вернемся к кон- курсу «Spring Idol».

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

По теме:

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