====== Spring Expression Language(SpEL) ====== ===== 개요 ===== Spring 3.0에서 처음 소개된 스프링 전용 표현식 언어로 강력하고 유연하게 사용된다.\\ SpEL은 빈 오브젝트에 직접 접근할 수 있는 표현식을 이용해서 프로퍼티 값을 능동적으로 가져오는 방법이며 가장 기본적이다. 또한 jsp에서 태그를 사용하여 SpEL을 적용 할 수도 있다. ===== 설명 ===== ==== 빈 설정파일을 사용하여 SpEL적용 ==== 빈 프로퍼티에 값을 설정하면, 다른 빈이나 프로퍼티에 접근 가능하다. * 다음의 **빈에서 접근**하는 예제이다. * 다음은 ** 를 사용하여 프로퍼티에 접근**하는 예제 이다. globals.properties driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:1623/EASYCOMPANY username=tex password=texAdmin context-datasource.xml * 다음은 ** 를 사용하여 변수로 직접 주입**하는 예제 이다. @Value("#{dbprops.driverClassName}") private String driverClassName; 또는 @Value("#{dbprops}") private Dbproperies dbprops; ==== JSP에서 SpEL적용 ==== JSP의 EL대신에 Spring 3.0의 SpEL을 사용해서 값을 출력할 수 있다. JSP에서 SpEL을 사용하려면 태그 라이브러리를 추가해야 한다. <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 태그를 사용하여 JSP에서 SpEL을 사용한다. 모델 오브젝트를 직접 사용할 수 있다. 메소드의 리턴값이 스트링일 경우, 메소드 자체를 호출할 수 있다. 또한, @NumberFormat, @DateTimeFormat과 같은 컨버전 서비스에 등록되는 포맷터를 자동으로 적용 할 수 있다. 다음은 sampleVO의 일부이다. /** 잔액 */ @NumberFormat(pattern = "###,##0") private Integer money; 위와 같이 적용하면 입력 값에 따라 3자리마다 쉼표(,)가 출력된다. **입력값: 1234000** **출력값: 1,234,000** 모델에 직접 어노테이션으로 설정하지 않아도 new를 이용해 SpEL을 적용할 수 있다. {{:egovframework:rte2:ptl:spel1.jpg|}}{{:egovframework:rte2:ptl:spel3.jpg|}} ===== 참고자료 ===== * [[http://static.springsource.org/spring/docs/3.0.0.M3/spring-framework-reference/html/ch07s04.html|Spring Framework - Reference Document / 7. Spring Expression Language (SpEL)]] * [[egovframework:rte3.9:rex:spel_예제|SpEL예제]]