4

messageSourceGrails i18n 插件中定义了一个bean,因此定义如下:

messageSource(PluginAwareResourceBundleMessageSource) {
  basenames = baseNames.toArray()
  fallbackToSystemLocale = false
  pluginManager = manager
  ....
}

是否可以仅覆盖fallbackToSystemLocale我的 resources.groovy 中的值的配置,例如:

messageSource {
    fallbackToSystemLocale = true
} 

以上不起作用,我收到一个错误:“使用名称'messageSource'创建bean时出错:bean定义是抽象的”

4

1 回答 1

6

有什么理由不简单地更新 beanBootStrap.groovy吗?

class BootStrap {
    def def messageSource
    def init = { servletContext ->
        messageSource.fallbackToSystemLocale = true
    }
}

如果你想在 BootStrap 运行之前修改 bean,你可以使用BeanPostProcessoras in this blog post

src/groovy/yourpkg/CustomBeanPostProcessor:

import org.springframework.beans.factory.config.BeanPostProcessor

class CustomBeanPostProcessor implements BeanPostProcessor{

    @Override
    Object postProcessBeforeInitialization(Object bean, String beanName) {
        return bean
    }

    @Override
    Object postProcessAfterInitialization(Object bean, String beanName) {
        if(beanName == 'messageSource') {
            bean.setFallbackToSystemLocale = true
        }
        return bean
    }
}

资源.groovy:

beans = {
    customBeanPostProcessor(CustomBeanPostProcessor)
}
于 2013-04-17T15:18:48.377 回答