【问题标题】:"Manually" creating beans with Grails BeanBuilder or Spring GenericGroovyApplicationContext使用 Grails BeanBuilder 或 Spring GenericGroovyApplicationContext “手动”创建 bean
【发布时间】:2014-10-08 00:12:45
【问题描述】:

我有一个具有复杂创建逻辑的类(例如使用构建器)。 早在 2000 年,由于 XML 是死板的,不是编程语言,我无法在其中编写创建逻辑,所以我将其封装在 FactoryBean 中。

然后,受祝福的 JavaConfig 来了(谢谢@cbeams)并将 FactoryBean 扔进了历史的垃圾箱。

由于 GroovyConfig 是向前迈出的额外一步(不仅是用于配置的真正编程语言,而且还与 DSL 一起使用),我肯定会找到一种简单而优雅的方式来编写我的方式虽然复杂的创建逻辑,但没有找到任何提及这样做的能力?!

我知道 GroovyConfig 或多或少是从 Grails BeanBuilder 中逐字提取的,所以如果有办法在那里做,它也可以在 GroovyConfig 中工作(手指交叉)。

请告诉我我遗漏了一些明显的东西,不必再次使用 FactoryBean!

睡在上面,我想答案是否定的。我正在添加一个答案(仍然希望它会因为错误而被严重否决)。请证明我错了!

【问题讨论】:

  • 我不讨厌FactoryBean - 这是一个三方法接口,Object getObject()Class getObjectType()boolean isSingleton()。几乎是你所期望的——你创造了什么,应该使用什么类型,是否只有这个,或者我们应该期待更多。也许你对FactoryBean 有过尴尬的经历,事情变得有点疯狂,酒精太多,然后是一些不恰当的触摸,然后是一些你不想谈论的东西。这很酷,但那是几年前的事了,很抱歉,FactoryBean 从那时起个人成长了很多。
  • 哈哈哈,太好了 :) 严肃地说,我并不讨厌 FactoryBean 本身,我讨厌强迫我使用冗余实体的 XML。
  • 没有一行代码的时髦问题?!我的天啊! :)
  • 想知道在哪里偷偷代码。不,只是关于 Spring 内部的理论。对不起。

标签: spring grails spring-groovy-config


【解决方案1】:

仔细想想,答案似乎是“不”。没有FactoryBean,我似乎无法管理,这就是为什么:

  • XML 和 GroovyConfig 是 BeanDefinitionReaders。他们正在解析配置文件(分别是 XML 和 groovy 脚本)并从中创建BeanDefinition。无论我在 groovy 脚本中编写什么逻辑都会影响 BeanDefinition(例如,我可以将作用域包装在 if-else 中)。然后,在我无法控制的后期阶段,Spring根据定义自己创建bean对象。
  • JavaConfig 不同。它不会被解析为 BeanDefinition 创建的配置文件,而是在其中创建的对象是 bean 本身(以及带有它们的 BeanDefinitions)!这意味着我可以控制 bean 创建的时间,并且可以在没有FactoryBean 的情况下实现任何 bean 实例创建逻辑,而不仅仅是BeanDefinition 逻辑。

【讨论】:

  • 我真正需要的是一个 bean 创建时间回调。我可能最终会这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
相关资源
最近更新 更多