Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
b6e9d1c9
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,发现更多精彩内容 >>
提交
b6e9d1c9
编写于
3月 27, 2018
作者:
S
Sam Brannen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Publish SpEL content in Reference Manual
上级
13356a7e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
34 addition
and
34 deletion
+34
-34
src/docs/asciidoc/core/core-expressions.adoc
src/docs/asciidoc/core/core-expressions.adoc
+34
-34
未找到文件。
src/docs/asciidoc/core/core-expressions.adoc
浏览文件 @
b6e9d1c9
...
...
@@ -7,17 +7,17 @@
[[
expressions
-
intro
]]
==
Introduction
The
Spring
Expression
Language
(
SpEL
for
short
)
is
a
powerful
expression
language
that
The
Spring
Expression
Language
(
_SpEL_
for
short
)
is
a
powerful
expression
language
that
supports
querying
and
manipulating
an
object
graph
at
runtime
.
The
language
syntax
is
similar
to
Unified
EL
but
offers
additional
features
,
most
notably
method
invocation
and
basic
string
templating
functionality
.
While
there
are
several
other
Java
expression
languages
available
,
OGNL
,
MVEL
,
and
JBoss
EL
,
to
name
a
few
,
the
Spring
Expression
Language
was
created
to
provide
the
Spring
While
there
are
several
other
Java
expression
languages
available
--
OGNL
,
MVEL
,
and
JBoss
EL
,
to
name
a
few
--
the
Spring
Expression
Language
was
created
to
provide
the
Spring
community
with
a
single
well
supported
expression
language
that
can
be
used
across
all
the
products
in
the
Spring
portfolio
.
Its
language
features
are
driven
by
the
requirements
of
the
projects
in
the
Spring
portfolio
,
including
tooling
requirements
for
code
completion
support
within
the
e
clipse
based
Spring
Tool
Suite
.
That
said
,
code
completion
support
within
the
E
clipse
based
Spring
Tool
Suite
.
That
said
,
SpEL
is
based
on
a
technology
agnostic
API
allowing
other
expression
language
implementations
to
be
integrated
should
the
need
arise
.
...
...
@@ -29,10 +29,10 @@ infrastructure classes such as the parser. Most Spring users will not need to de
this
infrastructure
and
will
instead
only
author
expression
strings
for
evaluation
.
An
example
of
this
typical
use
is
the
integration
of
SpEL
into
creating
XML
or
annotated
based
bean
definitions
as
shown
in
the
section
<<
expressions
-
beandef
,
Expression
support
for
defining
bean
definitions
.>>
for
defining
bean
definitions
>>.
This
chapter
covers
the
features
of
the
expression
language
,
its
API
,
and
its
language
syntax
.
In
several
places
an
Inventor
and
Inventor
's Society clas
s are used as the
syntax
.
In
several
places
an
`
Inventor
`
and
Inventor
's `Society` classe
s are used as the
target objects for expression evaluation. These class declarations and the data used to
populate them are listed at the end of the chapter.
...
...
@@ -82,7 +82,7 @@ The following code introduces the SpEL API to evaluate the literal string expres
The value of the message variable is simply '
Hello
World
'.
The SpEL classes and interfaces you are most likely to use are located in the packages
`org.springframework.expression` and its sub packages
and
`spel.support`.
`org.springframework.expression` and its sub packages
such as
`spel.support`.
The interface `ExpressionParser` is responsible for parsing an expression string. In
this example the expression string is a string literal denoted by the surrounding single
...
...
@@ -120,7 +120,7 @@ as shown below.
----
SpEL
also
supports
nested
properties
using
standard
_dot_
notation
,
i
.
e
.
prop1
.
prop2
.
prop3
and
the
setting
of
property
values
`
prop1
.
prop2
.
prop3
`
and
the
setting
of
property
values
Public
fields
may
also
be
accessed
.
...
...
@@ -181,7 +181,7 @@ create a boolean condition:
=== `EvaluationContext`
The interface `EvaluationContext` is used when evaluating an expression to resolve
properties, methods,
fields,
and to help perform type conversion. There are two
properties, methods,
or fields
and to help perform type conversion. There are two
out-of-the-box implementations.
* `SimpleEvaluationContext` -- exposes a subset of essential SpEL language features and
...
...
@@ -190,26 +190,26 @@ of the SpEL language syntax and should be meaningfully restricted. Examples incl
are not limited to data binding expressions, property-based filters, and others.
* `StandardEvaluationContext` -- exposes the full set of SpEL language features and
configuration options. You may use it to specify a default root object
,
and to configure
configuration options. You may use it to specify a default root object and to configure
every available evaluation-related strategy.
`SimpleEvaluationContext` is designed to support only a subset of the SpEL language syntax.
It
excludes
Java type references, constructors, and bean references. It also requires
explicit choosing
the level of support for properties and methods in expressions.
It
_excludes_
Java type references, constructors, and bean references. It also requires
that one explicitly choose
the level of support for properties and methods in expressions.
By default, the `create()` static factory method enables only read access to properties.
You can also obtain a builder to configure the exact level of support needed, targeting
one o
f, o
r some combination of the following:
one or some combination of the following:
. Custom `PropertyAccessor` only (no reflection)
.
. Data binding properties for read-only access
.
. Data binding properties for read and write
.
. Custom `PropertyAccessor` only (no reflection)
. Data binding properties for read-only access
. Data binding properties for read and write
[[expressions-type-conversion]]
==== Type conversion
By default SpEL uses the conversion service available in Spring core
(
`org.springframework.core.convert.ConversionService`). This conversion service comes
By default SpEL uses the conversion service available in Spring core
(
`org.springframework.core.convert.ConversionService`). This conversion service comes
with many converters built in for common conversions but is also fully extensible so
custom conversions between types can be added. Additionally it has the key capability
that it is generics aware. This means that when working with generic types in
...
...
@@ -288,17 +288,17 @@ It is also possible to configure the behaviour of the SpEL expression compiler.
Spring Framework 4.1 includes a basic expression compiler. Expressions are usually
interpreted which provides a lot of dynamic flexibility during evaluation but
does not provide
the
optimum performance. For occasional expression usage
does not provide optimum performance. For occasional expression usage
this is fine, but when used by other components like Spring Integration,
performance can be very important and there is no real need for the dynamism.
The
new
SpEL compiler is intended to address this need. The
The SpEL compiler is intended to address this need. The
compiler will generate a real Java class on the fly during evaluation that embodies the
expression behavior and use that to achieve much faster expression
evaluation. Due to the lack of typing around expressions the compiler
uses information gathered during the interpreted evaluations of an
expression when performing compilation. For example, it does not know the type
of a property reference purely from the expression but during the first
of a property reference purely from the expression
,
but during the first
interpreted evaluation it will find out what it is. Of course, basing the
compilation on this information could cause trouble later if the types of
the various expression elements change over time. For this reason compilation
...
...
@@ -378,9 +378,9 @@ enum values (`off`, `immediate`, or `mixed`).
[[expressions-compiler-limitations]]
==== Compiler limitations
With
Spring Framework 4.1 the basic compilation framework is in place. However, the framework does not
Since
Spring Framework 4.1 the basic compilation framework is in place. However, the framework does not
yet support compiling every kind of expression. The initial focus has been on the common expressions that are
likely to be used in performance critical contexts.
These
kinds of expression cannot be compiled
likely to be used in performance critical contexts.
The following
kinds of expression cannot be compiled
at the moment:
- expressions involving assignment
...
...
@@ -951,7 +951,7 @@ used).
===
Variables
Variables
can
be
referenced
in
the
expression
using
the
syntax
`#
variableName
`.
Variables
are
set
using
the
method
setVariable
on
`
EvaluationContext
`
implementations
.
are
set
using
the
method
`
setVariable
`
on
`
EvaluationContext
`
implementations
.
[
source
,
java
,
indent
=
0
]
[
subs
=
"verbatim,quotes"
]
...
...
@@ -969,10 +969,10 @@ are set using the method setVariable on `EvaluationContext` implementations.
[[
expressions
-
this
-
root
]]
====
The
#
this
and
#
root
variables
The
variable
#
this
is
always
defined
and
refers
to
the
current
evaluation
object
(
against
which
unqualified
references
are
resolved
).
The
variable
#
root
is
always
defined
and
refers
to
the
root
context
object
.
Although
#
this
may
vary
as
components
of
an
expression
are
evaluated
,
#
root
always
refers
to
the
root
.
The
variable
`#
this
`
is
always
defined
and
refers
to
the
current
evaluation
object
(
against
which
unqualified
references
are
resolved
).
The
variable
`#
root
`
is
always
defined
and
refers
to
the
root
context
object
.
Although
`#
this
`
may
vary
as
components
of
an
expression
are
evaluated
,
`#
root
`
always
refers
to
the
root
.
[
source
,
java
,
indent
=
0
]
[
subs
=
"verbatim,quotes"
]
...
...
@@ -1047,7 +1047,7 @@ The above method can then be registered and used as follows:
===
Bean
references
If
the
evaluation
context
has
been
configured
with
a
bean
resolver
it
is
possible
to
look
up
beans
from
an
expression
using
the
(@)
symbol
.
look
up
beans
from
an
expression
using
the
`@`
symbol
.
[
source
,
java
,
indent
=
0
]
[
subs
=
"verbatim,quotes"
]
...
...
@@ -1060,7 +1060,7 @@ lookup beans from an expression using the (@) symbol.
Object
bean
=
parser
.
parseExpression
(
"@foo"
).
getValue
(
context
);
----
To
access
a
factory
bean
itself
,
the
bean
name
should
instead
be
prefixed
with
a
(&)
symbol
.
To
access
a
factory
bean
itself
,
the
bean
name
should
instead
be
prefixed
with
a
n
`&`
symbol
.
[
source
,
java
,
indent
=
0
]
[
subs
=
"verbatim,quotes"
]
...
...
@@ -1087,7 +1087,7 @@ the expression. A minimal example is:
"false ? 'trueExp' : 'falseExp'"
).
getValue
(
String
.
class
);
----
In
this
case
,
the
boolean
false
results
in
returning
the
string
value
'falseExp'
.
A
more
In
this
case
,
the
boolean
false
results
in
returning
the
string
value
`
'falseExp'
`
.
A
more
realistic
example
is
shown
below
.
[
source
,
java
,
indent
=
0
]
...
...
@@ -1274,9 +1274,9 @@ define, a common choice is to use `#{ }` as the delimiters. For example,
// evaluates to "random number is 0.7038186818312008"
----
The string is evaluated by concatenating the literal text
'
random
number
is
'
with the
result of evaluating the expression inside the
#{ }
delimiter, in this case the result
of calling that
random()
method. The second argument to the method `parseExpression()`
The string is evaluated by concatenating the literal text
`'
random
number
is
'`
with the
result of evaluating the expression inside the
`#{ }`
delimiter, in this case the result
of calling that
`random()`
method. The second argument to the method `parseExpression()`
is of the type `ParserContext`. The `ParserContext` interface is used to influence how
the expression is parsed in order to support the expression templating functionality.
The definition of `TemplateParserContext` is shown below.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录