[NullPE] SpEL 때문에 고민 해결
Java : 2010. 2. 10. 18:47
애초에 MVEL.eval() 내부에서 레퍼런스를 타고 갈 때 null 처리를 해줄 수 있는 방법을 찾았다면 Null Object 패턴까지 적용할 생각은 안 들었을테고, 그럼 Null Object 패턴을 어떻게 적용해야 깔끔한가?에 대한 고민도 안했을 텐데.. 그 실마리가 바로 MVEL 대신 SpEL을 사용하는 것이었습니다. 이론... OTL
SpEL은 스프링 3.0에 새로 추가된 기능인데 이 녀석이 할 수 있는 멋진 일들에 비해 아직 이것을 어떻게 활용해야 할지 제대로 파악이 되지 않은 상태입니다.(제가 파악이 안됐다는 것이지 일반적으로 그렇다는 것이 아니오니 오해 마시기 바랍니다.)
/**
* Created by IntelliJ IDEA.
* User: whiteship
* Date: 2010. 2. 10
* Time: 오후 6:38:11
*/
public class SpELNullTest {
@Test
public void SafeNavigation(){
ExpressionParser parser = new SpelExpressionParser();
SpringSprout ss = new SpringSprout();
StandardEvaluationContext context = new StandardEvaluationContext(ss);
String myName = parser.parseExpression("whiteship?.name").getValue(context, String.class);
assertThat(myName, is(nullValue()));
}
class Whiteship{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class SpringSprout{
Whiteship whiteship;
public Whiteship getWhiteship() {
return whiteship;
}
public void setWhiteship(Whiteship whiteship) {
this.whiteship = whiteship;
}
}
}
흠냐.. 괜찮군요!
?. 가 아니라 그냥 . 로 연결하면 null 객체에 대고 getName()을 호출하는 격이라 에러가 납니다. ?, 연산식이 SpEL에서 지원하는 Safe Navigation이라는 녀석입니다.
이것 말고도 삼항 연산식도 제공하며 삼항 연산식에서 반복을 줄일 엘비스 연산식도 제공합니다. 아무튼 스프링은 참.. 멋지네요. +_+
덕분에 NullPE 고민 해결입니다.
SpEL은 스프링 3.0에 새로 추가된 기능인데 이 녀석이 할 수 있는 멋진 일들에 비해 아직 이것을 어떻게 활용해야 할지 제대로 파악이 되지 않은 상태입니다.(제가 파악이 안됐다는 것이지 일반적으로 그렇다는 것이 아니오니 오해 마시기 바랍니다.)
/**
* Created by IntelliJ IDEA.
* User: whiteship
* Date: 2010. 2. 10
* Time: 오후 6:38:11
*/
public class SpELNullTest {
@Test
public void SafeNavigation(){
ExpressionParser parser = new SpelExpressionParser();
SpringSprout ss = new SpringSprout();
StandardEvaluationContext context = new StandardEvaluationContext(ss);
String myName = parser.parseExpression("whiteship?.name").getValue(context, String.class);
assertThat(myName, is(nullValue()));
}
class Whiteship{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class SpringSprout{
Whiteship whiteship;
public Whiteship getWhiteship() {
return whiteship;
}
public void setWhiteship(Whiteship whiteship) {
this.whiteship = whiteship;
}
}
}
흠냐.. 괜찮군요!
?. 가 아니라 그냥 . 로 연결하면 null 객체에 대고 getName()을 호출하는 격이라 에러가 납니다. ?, 연산식이 SpEL에서 지원하는 Safe Navigation이라는 녀석입니다.
이것 말고도 삼항 연산식도 제공하며 삼항 연산식에서 반복을 줄일 엘비스 연산식도 제공합니다. 아무튼 스프링은 참.. 멋지네요. +_+
덕분에 NullPE 고민 해결입니다.
'Java' 카테고리의 다른 글
[ClassLoader 퀴즈 4] SpringSprout가 알고 있는 Whiteship은 누구인가? (10) | 2010.02.21 |
---|---|
[ClassLoader 퀴즈 3] Whiteship은 Whiteship일까 아닐까? (2) | 2010.02.19 |
[ClassLoader 퀴즈 2] Whiteship은 내가 데려왔다!! (5) | 2010.02.19 |
[ClassLoader 퀴즈 1] Whiteship은 대체 누가 데려온 것일까? (8) | 2010.02.19 |
[Java] ClassLoader API (2) | 2010.02.17 |
[NullPE] SpEL 때문에 고민 해결 (0) | 2010.02.10 |
[NullPE] NullPointerException 때문에 고민 1 (2) | 2010.02.10 |
WEB-INF/urlrewrite.xml 파일 설정하기 (0) | 2010.02.09 |
UrlRewriterFilter 옵션 (0) | 2010.02.07 |
UrlRewriterFilter 설치하기 (0) | 2010.02.07 |
"서블릿 매핑 규칙"과 "필터 순서 정하기 규칙" (2) | 2010.02.07 |