2016-11-18 103 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)

回答