Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
3dc5e7b1
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3dc5e7b1
编写于
11月 13, 2019
作者:
J
Juergen Hoeller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Avoid String concatenation for lookup in StaticMessageSource
Closes gh-22451
上级
6fa9871a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
54 addition
and
19 deletion
+54
-19
spring-context/src/main/java/org/springframework/context/support/StaticMessageSource.java
.../springframework/context/support/StaticMessageSource.java
+54
-18
spring-context/src/test/java/org/springframework/context/support/StaticMessageSourceTests.java
...ngframework/context/support/StaticMessageSourceTests.java
+0
-1
未找到文件。
spring-context/src/main/java/org/springframework/context/support/StaticMessageSource.java
浏览文件 @
3dc5e7b1
/*
* Copyright 2002-201
8
the original author or authors.
* Copyright 2002-201
9
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -36,33 +36,35 @@ import org.springframework.util.Assert;
*/
public
class
StaticMessageSource
extends
AbstractMessageSource
{
/** Map from 'code + locale' keys to message Strings. */
private
final
Map
<
String
,
String
>
messages
=
new
HashMap
<>();
private
final
Map
<
String
,
MessageFormat
>
cachedMessageFormats
=
new
HashMap
<>();
private
final
Map
<
String
,
Map
<
Locale
,
MessageHolder
>>
messageMap
=
new
HashMap
<>();
@Override
@Nullable
protected
String
resolveCodeWithoutArguments
(
String
code
,
Locale
locale
)
{
return
this
.
messages
.
get
(
code
+
'_'
+
locale
.
toString
());
Map
<
Locale
,
MessageHolder
>
localeMap
=
this
.
messageMap
.
get
(
code
);
if
(
localeMap
==
null
)
{
return
null
;
}
MessageHolder
holder
=
localeMap
.
get
(
locale
);
if
(
holder
==
null
)
{
return
null
;
}
return
holder
.
getMessage
();
}
@Override
@Nullable
protected
MessageFormat
resolveCode
(
String
code
,
Locale
locale
)
{
String
key
=
code
+
'_'
+
locale
.
toString
();
String
msg
=
this
.
messages
.
get
(
key
);
if
(
msg
==
null
)
{
Map
<
Locale
,
MessageHolder
>
localeMap
=
this
.
messageMap
.
get
(
code
);
if
(
localeMap
==
null
)
{
return
null
;
}
synchronized
(
this
.
cachedMessageFormats
)
{
MessageFormat
messageFormat
=
this
.
cachedMessageFormats
.
get
(
key
);
if
(
messageFormat
==
null
)
{
messageFormat
=
createMessageFormat
(
msg
,
locale
);
this
.
cachedMessageFormats
.
put
(
key
,
messageFormat
);
}
return
messageFormat
;
MessageHolder
holder
=
localeMap
.
get
(
locale
);
if
(
holder
==
null
)
{
return
null
;
}
return
holder
.
getMessageFormat
();
}
/**
...
...
@@ -75,7 +77,7 @@ public class StaticMessageSource extends AbstractMessageSource {
Assert
.
notNull
(
code
,
"Code must not be null"
);
Assert
.
notNull
(
locale
,
"Locale must not be null"
);
Assert
.
notNull
(
msg
,
"Message must not be null"
);
this
.
message
s
.
put
(
code
+
'_'
+
locale
.
toString
(),
msg
);
this
.
message
Map
.
computeIfAbsent
(
code
,
key
->
new
HashMap
<>(
4
)).
put
(
locale
,
new
MessageHolder
(
msg
,
locale
)
);
if
(
logger
.
isDebugEnabled
())
{
logger
.
debug
(
"Added message ["
+
msg
+
"] for code ["
+
code
+
"] and Locale ["
+
locale
+
"]"
);
}
...
...
@@ -95,7 +97,41 @@ public class StaticMessageSource extends AbstractMessageSource {
@Override
public
String
toString
()
{
return
getClass
().
getName
()
+
": "
+
this
.
messages
;
return
getClass
().
getName
()
+
": "
+
this
.
messageMap
;
}
private
class
MessageHolder
{
private
final
String
message
;
private
final
Locale
locale
;
@Nullable
private
volatile
MessageFormat
cachedFormat
;
public
MessageHolder
(
String
message
,
Locale
locale
)
{
this
.
message
=
message
;
this
.
locale
=
locale
;
}
public
String
getMessage
()
{
return
this
.
message
;
}
public
MessageFormat
getMessageFormat
()
{
MessageFormat
messageFormat
=
this
.
cachedFormat
;
if
(
messageFormat
==
null
)
{
messageFormat
=
createMessageFormat
(
this
.
message
,
this
.
locale
);
this
.
cachedFormat
=
messageFormat
;
}
return
messageFormat
;
}
@Override
public
String
toString
()
{
return
this
.
message
;
}
}
}
spring-context/src/test/java/org/springframework/context/support/StaticMessageSourceTests.java
浏览文件 @
3dc5e7b1
...
...
@@ -59,7 +59,6 @@ public class StaticMessageSourceTests extends AbstractApplicationContextTests {
@Test
@Override
public
void
count
()
{
// These are only checked for current Ctx (not parent ctx)
assertCount
(
15
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录