Вы можете реализовать интерфейс org.springframework.beans.factory.FactoryBean
для объектов, которые сами являются фабриками.
Интерфейс FactoryBean
является точкой подключения к логике создания экземпляров IoC-контейнера Spring. Если у вас сложный код инициализации, который лучше выразить на Java, а не на (потенциально) перегруженном XML, вы можете создать свой собственный FactoryBean
, написать сложную инициализацию внутри этого класса, а затем подключить свой FactoryBean
к контейнеру.
Интерфейс FactoryBean<T>
предоставляет три метода:
-
T getObject()
: Возвращает экземпляр объекта, который создает эта фабрика. Экземпляр может быть общим, в зависимости от того, возвращает ли эта фабрика объекты-одиночки или объекты-прототипы. -
boolean isSingleton()
: Возвращаетtrue
, если этотFactoryBean
возвращает объекты-одиночки, илиfalse
- в противном случае. Реализация данном метода по умолчанию возвращаетtrue
. -
Class<?> getObjectType()
: Возвращает тип объекта, возвращенный методомgetObject(),
или null , если тип не известен заранее.
Концепция и интерфейс FactoryBean
используются во многих случаях в Spring Framework. Более 50 реализаций интерфейса FactoryBean
поставляются в составе самого Spring.
Если нужно запросить у контейнера сам экземпляр FactoryBean
, а не созданный им бин, при вызове метода getBean()
ApplicationContext
префикс id
бина обозначается символом амперсанда (&
). Так, для данного FactoryBean
с id
myBean
вызов getBean("myBean")
для контейнера возвращает результат обработки FactoryBean
, тогда как вызов getBean("&myBean")
возвращает сам экземпляр FactoryBean
.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ