2016-11-18 102 views
0

使用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)

回答