Вы можете реализовать интерфейс 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.