使用Grails:3.1.12Grails的初始化豆加載順序
[問題]
我已經創建了在初始化時創建JSON命名的配置,因此可以事後使用的插件。
豆子:
MyBean implements InitializingBean{
void afterPropertiesSet() throws Exception {
JSON.createNamedConfig('mycfg',{
it.registerObjectMarshaller(new MyObjectMarshaller())
})
}
}
插件:
Closure doWithSpring() { {->
"myBean"(MyBean){}
}}
但是,當我要使用的配置和轉換一個簡單的HashMap,它會抱怨沒有發現的Marshaller。
JSON.use 'mycfg',{([a:'3'] as JSON).toString()}
異常
Caused by: org.grails.web.converters.exceptions.ConverterException: Unconvertable Object of class: java.util.LinkedHashMap
at grails.converters.JSON.value(JSON.java:182)
at grails.converters.JSON.render(JSON.java:119)
[調查]
JSON創建時createNamedConfig被調用,並使用它作爲createNamedConfig閉合自變量的委派defaultconfiguration。我發現參數配置不等於grails加載時的配置(這是一個Chained配置)。鏈式配置由ConvertersConfigurationInitializer中的grails設置,並在初始化插件的InitializingBean後加載。所以當我的插件bean初始化時,JSON並不知道默認的grails配置。
[問題]
是否可以確保爲myBean的afterPropertiesSet是ConvertersConfigurationInitializer的afterPropertiesSet後裝? (無需在MyBean中直接引用ConvertersConfigurationInitializer)