【发布时间】:2019-08-19 09:02:13
【问题描述】:
我搜索了大半个互联网,但没有找到明确的答案......
我想做简单的事情:就像在 Grails 中有一个 MessageSource 类型的单例,在控制器中使用它来显示 i18n 消息。
我想从这个文件初始化我的messageSource:
src/main/resources/my/package/i18n/Messages*.properties
test=FooBar
初始化尝试:
class AppConfig {
@Singleton
MessageSource messageSource() {
new ResourceBundleMessageSource( 'my.package.i18n.Messages' )
}
}
要注入的控制器:
class CRUDController<T> {
@Inject
MessageSource messageSource
@Transactional( readOnly=true )
@Get( '/' )
Map<String,Object> list() {
log.info "$messageSource -> ${messageSource.getMessage( 'test', MessageSource.MessageContext.DEFAULT )}"
[:]
}
}
日志信息打印如下:
io.micronaut.runtime.context.CompositeMessageSource@79a1d030 -> Optional.empty
所以,messageSource 以某种方式(和某处)错误初始化。
做这件简单事情的最简单直接的方法是什么?
【问题讨论】:
-
与您的问题无关,但私有构造函数是多余的。
-
即使你删除了私有构造函数,你也会拥有它。您有另一个构造函数的事实会阻止生成无参数构造函数。
-
我已将您的代码粘贴到新创建的 1.2 应用程序中,但无法重现该行为。如果您可以指出一个演示问题的示例应用程序,那么诊断将更容易。
-
@JeffScottBrown 你能粘贴或指向我
messageSource的初始化代码吗? -
"你能粘贴或指向messageSource的初始化代码吗" - 这正是你所拥有的......
@Inject MessageSource messageSource。
标签: java groovy dependency-injection internationalization micronaut