Spring IoC контейнер: точки расширения контейнера, настройка логики реализации с помощью FactoryBean
Вы можете реализовать интерфейс org.springframework.beans.factory.FactoryBean для объектов, которые сами являются фабриками.
Интерфейс FactoryBean - это точка подключения к логике создания контейнера Spring IoC. Если у вас есть сложный код инициализации, который лучше выражен в Java, в отличие от (возможно) многословного объема XML, вы можете создать свой собственный FactoryBean, записать сложную инициализацию внутри этого класса, а затем вставить свой собственный FactoryBean в контейнер.
Интерфейс FactoryBean предоставляет три метода:
- Object getObject(): возвращает экземпляр объекта, который создает эта фабрика. Экземпляр может быть общим, в зависимости от того, возвращает ли эта фабрика синглтоны или прототипы.
- boolean isSingleton(): возвращает true, если этот FactoryBean возвращает синглтоны или false в противном случае.
- Class getObjectType(): возвращает тип объекта, возвращаемый методом getObject(), или значение null, если тип заранее не известен.
Концепция и интерфейс FactoryBean используются в Spring Framework во многих местах. Более 50 реализаций интерфейса FactoryBean поставляются с самим Spring.
Когда вам нужно запросить у контейнера сам фактический экземпляр FactoryBean вместо создаваемого им бина, перед вызовом метода getBean() объекта ApplicationContext перед идентификатором бина вводится символ амперсанда (&). Таким образом, для данного FactoryBean с идентификатором myBean вызов getBean("myBean") для контейнера возвращает продукт FactoryBean, тогда как вызов getBean("&myBean") возвращает сам экземпляр FactoryBean.
Читайте также:
- Spring IoC контейнер: точки расширения контейнера, PropertyOverrideConfigurer
- Spring IoC контейнер: точки расширения контейнера, подстановка имени класса PropertySourcesPlaceholderConfigurer
- Spring IoC контейнер: точки расширения контейнера, пример использования BeanPostProcessor
- Spring IoC контейнер: точки расширения контейнера, BeanFactoryPostProcessor
Комментарии
Отправить комментарий