Главная » Spring » Постобработка контейнера Spring

0

Реализация интерфейса BeanPostProcessor выполняет постобработку компонента после его загрузки, тогда как реализация интерфейса Bean- FactoryPostProcessor выполняет постобработку всего контейнера Spring. Интерфейс BeanFactoryPostProcessor определен следующим образом:

public  interface  BeanFactoryPostProcessor  { void postProcessBeanFactory(

ConfigurableListableBeanFactory    beanFactory) throws  BeansException;

}

Метод postProcessBeanFactory() вызывается контейнером Spring после загрузки определений всех компонентов, но перед созданием любых их экземпляров (включая компоненты BeanPostProcessor).

Например, следующая реализация интерфейса BeanFactoryPost- Processor придает новый смысл термину «счетчик компонентов»:

public class BeanCounter implements BeanFactoryPostProcessor { private Logger LOGGER = Logger.getLogger(BeanCounter.class); public   void   postProcessBeanFactory(

ConfigurableListableBeanFactory  factory) throws BeansException {

LOGGER.debug("BEAN  COUNT:  "  +

factory.getBeanDefinitionCount());

}

}

Класс BeanCounter реализует интерфейс BeanFactoryPostProcessor и просто записывает количество компонентов, загруженных в фабри- ку компонентов.

При использовании контейнера контекста приложения, чтобы за- регистрировать реализацию интерфейса BeanFactoryPostProcessor, до- статочно просто объявить ее как обычный компонент:

<bean id="beanCounter" class="com.springinaction.chapter03.postprocessor.BeanCounter"/>

Когда контейнер обнаружит, что компонент beanCounter реализу- ет интерфейс BeanFactoryPostProcessor, он автоматически зарегист- рирует его для постобработки фабрики компонентов. Реализации интерфейса BeanFactoryPostProcessor нельзя использовать совместно с базовыми контейнерами фабрики компонентов – эта возможность доступна только в контейнерах контекста приложения.

Класс BeanCounter в данном примере является достаточно прос- той реализацией интерфейса BeanFactoryPostProcessor. Чтобы найти более сложные примеры, не нужно идти слишком далеко. Вы уже видели CustomerEditorConfigurer, реализующий интерфейс BeanFactory- PostProcessor и используемый для регистрации пользовательских ре- дакторов свойств в Spring.

Еще одна достаточно полезная реализация BeanFactoryPostProcessor – класс PropertyPlaceholderConfigurer. Он загружает свойства из одного или более внешних файлов свойств и использует их для подстанов- ки значений переменных в XML-файле конфигурации компонентов. Класс PropertyPlaceholderConfigurer будет рассмотрен далее.

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

По теме:

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