Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
2d732ba3
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,发现更多精彩内容 >>
提交
2d732ba3
编写于
8月 16, 2008
作者:
A
Andy Clement
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
javadoc
上级
3d4158ea
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
18 addition
and
18 deletion
+18
-18
org.springframework.expression/src/main/java/org/springframework/expression/CacheablePropertyAccessor.java
...springframework/expression/CacheablePropertyAccessor.java
+18
-18
未找到文件。
org.springframework.expression/src/main/java/org/springframework/expression/CacheablePropertyAccessor.java
浏览文件 @
2d732ba3
package
org.springframework.expression
;
// TODO (asc) Do we need a 'caching is allowed' option to be configurable at parse time?
/**
* A CacheablePropertyAccessor is an optimized PropertyAccessor where the two parts of accessing the
*
property are separated: (1) resolving the property and (2) retrieving its value. In some cases there is
*
a large cost to discovering which property an expression refers to and once discovered it will
*
always resolve to the same property. In these situations a CacheablePropertyAccessor enables the
*
resolution to be done once and a reusable object (an executor) returned that can be called over and
*
over to retrieve the property value without going through resolution
again.
* A CacheablePropertyAccessor is an optimized PropertyAccessor where the two parts of accessing the
property are
*
separated: (1) resolving the property and (2) retrieving its value. In some cases there is a large cost to
*
discovering which property an expression refers to and once discovered it will always resolve to the same property.
*
In these situations a CacheablePropertyAccessor enables the resolution to be done once and a reusable object (an
*
executor) returned that can be called over and over to retrieve the property value without going through resolution
* again.
* <p>
*
*
* @author Andy Clement
*/
public
abstract
class
CacheablePropertyAccessor
implements
PropertyAccessor
{
/**
* Attempt to resolve the named property and return an executor that can be called to
*
get the value of that property.
Return null if the property cannot be resolved.
* Attempt to resolve the named property and return an executor that can be called to
get the value of that
*
property.
Return null if the property cannot be resolved.
*
* @param context the evaluation context
* @param target the target upon which the property is being accessed
...
...
@@ -26,8 +25,8 @@ public abstract class CacheablePropertyAccessor implements PropertyAccessor {
public
abstract
PropertyReaderExecutor
getReaderAccessor
(
EvaluationContext
context
,
Object
target
,
Object
name
);
/**
* Attempt to resolve the named property and return an executor that can be called to
*
set the value of that property.
Return null if the property cannot be resolved.
* Attempt to resolve the named property and return an executor that can be called to
set the value of that
*
property.
Return null if the property cannot be resolved.
*
* @param context the evaluation context
* @param target the target upon which the property is being accessed
...
...
@@ -37,21 +36,22 @@ public abstract class CacheablePropertyAccessor implements PropertyAccessor {
public
abstract
PropertyWriterExecutor
getWriterAccessor
(
EvaluationContext
context
,
Object
target
,
Object
name
);
// Implementation of PropertyAccessor follows, based on the resolver/executor model
public
final
boolean
canRead
(
EvaluationContext
context
,
Object
target
,
Object
name
)
throws
AccessException
{
return
getReaderAccessor
(
context
,
target
,
name
)
!=
null
;
return
getReaderAccessor
(
context
,
target
,
name
)
!=
null
;
}
public
final
boolean
canWrite
(
EvaluationContext
context
,
Object
target
,
Object
name
)
throws
AccessException
{
return
getWriterAccessor
(
context
,
target
,
name
)
!=
null
;
return
getWriterAccessor
(
context
,
target
,
name
)
!=
null
;
}
public
final
Object
read
(
EvaluationContext
context
,
Object
target
,
Object
name
)
throws
AccessException
{
return
getReaderAccessor
(
context
,
target
,
name
).
execute
(
context
,
target
);
return
getReaderAccessor
(
context
,
target
,
name
).
execute
(
context
,
target
);
}
public
final
void
write
(
EvaluationContext
context
,
Object
target
,
Object
name
,
Object
newValue
)
throws
AccessException
{
getWriterAccessor
(
context
,
target
,
name
).
execute
(
context
,
target
,
newValue
);
public
final
void
write
(
EvaluationContext
context
,
Object
target
,
Object
name
,
Object
newValue
)
throws
AccessException
{
getWriterAccessor
(
context
,
target
,
name
).
execute
(
context
,
target
,
newValue
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录