&引用;“手动”;使用GrailsBeanBuilder或SpringGenericGroovyApplicationContext创建bean
我有一个具有复杂创建逻辑的类(例如,使用生成器)。 早在2000年,因为XML是严格的,不是一种编程语言,我无法用它编写创建逻辑,所以我将它封装在FactoryBean中 然后,幸运的JavaConfig来了(谢谢,@cbeams)并将FactoryBean扔进了历史垃圾箱 由于GroovyConfig是一个额外的进步(不仅是一种真正的配置编程语言,而且还有DSL),我肯定会找到一种简单而优雅的方式来编写代码,尽管创建逻辑很复杂,但我没有发现任何关于这种能力的提述 我知道GroovyConfig或多或少是从GrailsBeanBuilder一字不差地获得的,所以如果有办法做到这一点,它也可以在GroovyConfig中工作(祈祷吧) 请告诉我,我遗漏了一些明显的东西,不必再使用FactoryBean了&引用;“手动”;使用GrailsBeanBuilder或SpringGenericGroovyApplicationContext创建bean,spring,grails,spring-groovy-config,Spring,Grails,Spring Groovy Config,我有一个具有复杂创建逻辑的类(例如,使用生成器)。 早在2000年,因为XML是严格的,不是一种编程语言,我无法用它编写创建逻辑,所以我将它封装在FactoryBean中 然后,幸运的JavaConfig来了(谢谢,@cbeams)并将FactoryBean扔进了历史垃圾箱 由于GroovyConfig是一个额外的进步(不仅是一种真正的配置编程语言,而且还有DSL),我肯定会找到一种简单而优雅的方式来编写代码,尽管创建逻辑很复杂,但我没有发现任何关于这种能力的提述 我知道GroovyConfig
沉睡在它上面,我想答案是否定的。我正在添加一个答案(仍然希望它会被可怕地否决为错误的答案)。请证明我错了 仔细想想,答案似乎是“不”。似乎没有FactoryBean我无法管理,这就是为什么:
- XML和GroovyConfig是
s。他们正在解析配置文件(分别是XML和groovy脚本)并从中创建BeanDefinitionReader
。我在groovy脚本中编写的任何逻辑都会影响BeanDefinition(例如,我可以在BeanDefinition
中包装作用域)。然后,在我无法控制的后期阶段,Spring根据自己的定义创建bean对象if else
- JavaConfig是不同的。它没有被解析为
创建的配置文件,而是在其中创建的对象是bean本身(以及带有它们的BeanDefinition
s)!这意味着我在创建bean时拥有控制权,可以在不使用BeanDefinition
的情况下实现任何bean实例创建逻辑,而不仅仅是FactoryBean
逻辑李>BeanDefinition
FactoryBean
——它是一个三种方法的接口,对象getObject()
,类getObjectType()
,和布尔isSingleton()
。和你期望的差不多-你创造了什么,它应该用什么类型,会不会只有这一个,或者我们应该期望更多。也许你有过一次与FactoryBean打交道的尴尬经历,事情变得有点疯狂,有太多的酒精,然后是一些不恰当的触摸,然后是一些你不想谈论的事情。这很酷,但那是几年前的事了,FactoryBean
很抱歉,从那时起个人成长了很多。哈哈哈,很棒:)严肃地说,我并不讨厌FactoryBean本身,我讨厌强迫我使用冗余实体的XML。groovy问题,没有一行代码?!天哪!:)我正琢磨着去哪里偷代码。不,只是关于弹簧内部的理论。对不起,我真正需要的是一个bean创建时回调。我最终可能会那样做。