์คํ๋ง ELโ์ด๋?
์คํ๋ง ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ํ์๋ก ํ๋ค๋ณด๋๊น, Unified EL ์ ๋ฉ์๋ ํธ์ถ ๊ธฐ๋ฅ๊ณผ, ๋ฌธ์์ด ํ ํ๋ฆฟ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์คํ๋ง์ด SpEL์ ๊ฐ๋ฐํ๊ฒ ๋๊ฒ์ด๋ค.
- ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ์กฐํํ๊ณ ์กฐ์ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
-
Unified ELโ๊ณผ ๋น์ทํ์ง๋ง, ๋ฉ์๋ ํธ์ถ์ ์ง์ํ๋ฉฐ, ๋ฌธ์์ด ํ ํ๋ฆฟ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
-
OGNL, MVEL, JBOss EL ๋ฑ ์๋ฐ์์ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฌ EL์ด ์์ง๋ง, SpEL์
๋ชจ๋ ์คํ๋ง ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ์ฌ์ฉํ EL๋ก ๋ง๋ค์๋ค.
-
์คํ๋ง 3.0 ๋ถํฐ ์ง์.
SpEL ๊ตฌ์ฑ
ExpressionParser expressionParser = new SpelExpressionParser();
Expression expression = expressionParser.parseExpression("2 + 100");//์ด ์์ฒด๊ฐ Expression ์ด๊ธฐ ๋๋ฌธ์ #{"!!์ด ๋ถ๋ถ๋ง ๋ฃ์ด์ฃผ๋ฉด ๋จ!!"}
Integer value = expression.getValue(Integer.class);//Spring Expression Language๋ ์ด๋ Conversion Service ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
System.out.println(value); //int ๊ฐ์ด ์ฐํ๊ฒ ๋๋ค. (102)
-
ExpressionParserโโ parser = new SpelExpressionParser()
-
StandardEvaluationContext context = new StandardโEvaluationContextโโ(bean)
-
Expression expression = parser.parseExpression(“SpEL ํํ์”) // ์ด๋ฏธ ์์ฒด๊ฐ expression์ด๋ผ์ #{ }๊ฐ ๋ค์ด์๋ค.
-
String value = expression.getvalue(context, String.class)
SpEL์ ๋ด๋ถ์ ์ผ๋ก ExpressionParser ๊ฐ์ฒด๋ฅผ ํตํด SpEL์ ํํ์์ ํ์ฑํ๋ฉฐ StandardEvaluationContext ๊ฐ์ฒด๋ฅผ ํตํด ์คํ๋ง ๋น์ด ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ๊ตฌํ๋ค. ์ด ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ํํ์ ๊ฐ์ฒด์ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ SpEL์ ํํ์ ๊ฐ์ ๊ฒฐ์ ํ๋ค.
๋ฌธ๋ฒ
-
#{“ํํ์"}
-
${“ํ๋กํผํฐ"}
-
ํํ์์ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง์ ์์ง๋ง, ๋ฐ๋๋ ์๋จ.
-
#{${my.data} + 1}
-
-
@Component
public class AppRunner implements ApplicationRunner {
/*
๋ฌธ๋ฒ์ ์ด ๋๊ฐ์ง๊ฐ ์๋ค.
์กฐ๊ฑด์ ์ฌ์ฉ๊ณผ ํ๋กํผํฐ ์ฐธ๊ณ
@Value("#{์กฐ๊ฑด์}")
@Value("${ํ๋กํผํฐ}")
์กฐ๊ฑด์์ ํ๋กํผํฐ๋ฅผ ๋ฃ์์ ์๋ค.
("#{${my.value} + 1}") ์ด๋ฐ์์ผ๋ก(๋์ ๋ฐ๋๋ก๋ ์๋จ)
*/
@Value("#{1 + 1}") // 1+1 ์ฐ์ฐ
int value;
@Value("#{1 eq 1}") //1 = 1 equals ์ฐ์ฐ
Boolean istrueOrfalse;
@Value("#{'hello' + 'world'}") //string
String greeting;
@Value("hello") //๊ทธ๋ฅ ๋ฌธ์์ด์ ๋ฃ์ด๋ ๊ฐ๋ฅ.
String hello;
@Value("${my.value}") //ํ๋กํผํฐ ์ฐธ๊ณ ํ๋ ๋ฐฉ๋ฒ
int myvalue;
@Value("#{${my.value} eq 100}")
boolean ismyValue100;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(value);
System.out.println(istrueOrfalse);
System.out.println(greeting);
System.out.println(hello);
System.out.println(myvalue);
System.out.println(ismyValue100);
}
}
resource > application.properties ์ my.value = 100 ์ถ๊ฐ.
my.value = 100
======================================================================================================
์ถ๋ ฅ ๊ฒฐ๊ณผ
2
true
helloworld
hello
100
true
์ค์ ๋ก ์ด๋์ ์ฐ๋?
-
@Value ์ ๋ ธํ ์ด์
-
@ConditionalOnExpression ์ ๋ ธํ ์ด์
-
์คํ๋ง ์ํ๋ฆฌํฐ
-
๋ฉ์๋ ์ํ๋ฆฌํฐ, @PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter
-
XML ์ธํฐ์ ํฐ URL ์ค์
-
...
-
-
์คํ๋ง ๋ฐ์ดํฐ
-
@Query ์ ๋ ธํ ์ด์
-
- Thymeleaf
- ...