2013-04-17 50 views
3

有一個在國際化的Grails插件defined thusly定義的messageSource豆:Grails的 - 覆蓋resources.groovy一個bean屬性值

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

是否有可能從我的resources.groovy覆蓋只是fallbackToSystemLocale值的配置,是這樣的:

messageSource { 
    fallbackToSystemLocale = true 
} 

以上不工作,我得到一個錯誤:「錯誤創建豆名爲'爲messageSource:bean定義是抽象的」

+0

我不知道,如果你能做到這一點,但你可以使用setter方法:'爲messageSource。 setFallbackToSystemLocale(true)' –

回答

5

是否有任何理由不簡單地更新BootStrap.groovy中的bean?

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

如果你想自舉已運行之前修改豆,你可以使用一個BeanPostProcessorthis blog post

的src /常規/ 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 
    } 
} 

resources.groovy:

beans = { 
    customBeanPostProcessor(CustomBeanPostProcessor) 
} 
+0

BeanPostProcessor似乎是一種更有組織的方法。 –