2014-10-08 2 views
3

У меня есть класс со сложной логикой создания (например, использует построитель). Еще в 2000 году, поскольку XML является жестким, а не языком программирования, я не смог закодировать в нем логику создания, поэтому я инкапсулировал его в FactoryBean.«Вручную» создание bean-компонентов с Grails BeanBuilder или Spring GenericGroovyApplicationContext

Затем появился благословенный JavaConfig (спасибо, @cbeams) и бросил FactoryBean в корзину.

Поскольку GroovyConfig - это дополнительный шаг вперед (не только настоящий язык программирования для конфигурации, но и DSL), я был уверен, что найду простой и элегантный способ кодировать свой путь, хотя сложная логика создания, но didn ' t найти какое-либо упоминание о способности сделать это ?!

Я понимаю, что GroovyConfig более или менее доведен дословно из Grails BeanBuilder, поэтому, возможно, если есть способ сделать это, он также будет работать в GroovyConfig (скрещенные пальцы).

Пожалуйста, скажите мне, что у меня что-то не хватает и не нужно снова использовать FactoryBean!

Сон на нем, я думаю, что ответ отрицательный. Я добавляю ответ (все еще надеялся, что он будет ужасно опущен как неправильный). Пожалуйста, докажите, что я неправ!

+1

Я не получаю ненависти к 'FactoryBean' - это 3-методный интерфейс,' Object getObject() ',' класс getObjectType() 'и' boolean isSingleton() '. Довольно многое, что вы ожидаете, - что вы создали, с каким типом он должен работать, и будет ли это только один, или мы должны ожидать большего. Возможно, у вас был неудобный опыт с «FactoryBean», все получилось немного диким, было слишком много алкоголя, затем некоторые неуместные прикосновения, а затем некоторые вещи, о которых вы бы не говорили. Это круто, но это было много лет назад, и «FactoryBean» сожалеет, и с тех пор он очень сильно вырос. –

+0

Хахаха, замечательный :) В серьезной ноте я не ненавижу FactoryBean, я ненавижу XML, что заставляет меня использовать избыточную сущность. – JBaruch

+0

groovy вопрос без единой строки кода ?! О, МОЙ БОГ! :) – injecteer

ответ

2

Думая об этом, похоже, что ответ «нет». Похоже, я не могу обойтись без FactoryBean, вот почему:

  • XML и GroovyConfig являются BeanDefinitionReader s. Они анализируют конфигурационные файлы (соответственно XML и groovy) и создают из них BeanDefinition. Любая логика, которую я кодирую в groovy-скрипте, влияет на BeanDefinition (например, я могу обернуть область в if-else). Затем на более поздней фазе, которой у меня нет, Spring создает объекты bean-объектов на основе определения сам по себе.
  • JavaConfig отличается. Он не анализируется как файл конфигурации для создания BeanDefinition, но вместо этого объекты, созданные в нем, являются самими бобамиBeanDefinition с ними)! Это означает, что у меня есть контроль во время создания компонента и может реализовать любую логику создания экземпляра bean без FactoryBean, а не только BeanDefinition логики.
+0

Мне действительно нужен обратный вызов времени создания компонента. Я мог бы это сделать. – JBaruch

Смежные вопросы