3.0에 추가된 SpEL의 활용방법은 매우 다양하다. SpEL을 사용하면 기존에 애용되던 ${}와 <context:property-placeholder>를 대체할 수도 있다.

${}로 property place holder를 만들어 두고 프로퍼티 파일을 읽어서 value를 바꿔치기 하는 방법은 환경에 따라서 자주 변하는 DB연결정보와 같은 설정정보를 XML이나 소스코드에서 분리시킬 수 있다는 장점이 있다. SRP에 따르면 responsibility, 즉 변하는 이유가 다르면 분리해야 한다. 설정 정보도 마찬가지다.

${} 방식의 단점은 프로퍼티 파일의 키 값에 ${ prefix와 } suffix를 붙여서 find-and-replace 방식으로 동작한다는 점이다. 매칭되는 키 값이 존재하지 않으면 ${} 부분이 그대로 남을 수 있다. 설정을 빼먹은 것이라면 모르겠지만 오타로 인해서 이름을 잘못 적거나 ${}을 제대로 넣지 않아도 경고 없이 그냥 넘어간다. 내부적으로는 BFPP에 의해서 동작하는 것이므로 ${}을 가진 빈 입장에서는 수동적이다. 남이 변경해주면 고맙고 아니어도 불평을 할 수 없다.

반면에 SpEL을 사용하는 방법은 능동적이다. SpEL로 property-placeholder를 대체하면 BFPP를 사용하지 않아도 된다. <util:properties>를 이용해서 프로퍼티 파일을 Properties 타입의 빈으로 생성하게 하고 다른 빈 오브젝트에 접근할 수 있는 SpEL을 이용해서 원하는 프로퍼티 값을 찾아오게 만들면 된다.

<util:properties id=”dbpr” location=”…” /> 이라고 되어있다면,

<property name=”username” value=”#{dbpr[‘username’]}” /> 으로 만들어주면된다. []는 Map 오브젝트의 get()을 호출해주는 SpEL의 표현이다.

SpEL은 능동적이다. 자기가 필요한 정보를 원하는 프로퍼티 정보를 담은 빈에 가서 직접 찾아오는 것이다. Properties빈이 존재하지 않으면 에러도 발생시켜준다. 물론 Map의 get()이라 키에 해당하는 값이 없어도 그냥 null이 들어간다는 한계는 있다. 수식을 좀 길게 쓰면 null인 경우에 오류가 발생하게 만드는 것도 가능할 것이다.

${}는 기존 설정의 호환성과 익숙한 방식의 집착 때문에라도 앞으로 오랜동안 사용될 것이다. context 스키마에서 직접 지원해주는 기능이기도 하고. 하지만 나는 SpEL을 사용하는 능동적인 방식으로 모두 바꿀 생각이다. 더 명시적이고, 구체적이고, 이해하기 쉽고, 오류도 잘 잡아주는 SpEL 방식이 더 맘에 들기 때문이다.

Related posts:

  1. Spring 3.0 EL (Spel)을 이용한 AssertThrows 확장 (3)
  2. Spring 3.0 EL (Spel)을 이용한 AssertThrows 확장 (2)
  3. Spring Expressions(SpEL)를 이용한 Mockito Argument Matcher 만들기
  4. Spring 3.0 EL (Spel)을 이용한 AssertThrows 확장 (1)
  5. 스프링 컨테이너에는 설정파일이 없다
  6. 톰캣 앞에 아파치 웹 서버(Httpd)를 두어야 할까?
  7. Maven archetype 설정파일 자동생성기 – ArchetypeXmlWriter
  8. 파이썬 완벽 가이드 전자책
  9. Spring 2.0의 XML확장기능 (1)
  10. 스프링 3.1 (7) 프로퍼티 소스 추상화와 PropertySourcePlaceholderConfigurer
  11. Inside Spring (5) PropertyPlaceholderConfigurer를 @Bean으로 정의해서는 안되는 이유
  12. Spring 3.0 (28) R-669 Update
  13. Spring 3.0 (52) 반쪽짜리 3.0 RC1 공개
  14. Spring 3.0 (36) Field Marker와 Field Default
  15. Spring 3.0 (2) R-518 스프링의 새 모듈 OXM(Object/XML Mapping)

Facebook comments:

to “Spring 3.0 (59) 프로퍼티 파일 이용하기 – placeholder vs SpEL”

  1. eIXyx7 ldtfgygbwggl, [url=http://ctjkflojvfpc.com/]ctjkflojvfpc[/url], [link=http://gmlsitbhsdfn.com/]gmlsitbhsdfn[/link], http://qdfpzkbnahkg.com/

  2. Hi” i think that you should add captcha to your blog.    

  3. Nice read, I just passed this onto a colleague who was doing some research on that. And he just bought me lunch since I found it for him smile Thus let me rephrase that: Thank you for lunch!

  4. Nice read, I just passed this onto a friend who was doing some research on that. And he just bought me lunch as I found it for him smile Thus let me rephrase that: Thanks for lunch! “Feeling passionate about something is like getting a peak at your soul smiling back at you.” by Amanda Medinger.

  5. usually posts some extremely exciting stuff like this. If you are new to this site

  6. Nice post. I understand some thing additional challenging on different blogs everyday. It is going to usually be stimulating to read content from other writers and practice somewhat something from their store. I’d prefer to use some with the content on my blog whether or not you do not mind. Natually I’ll provide you with a link on your internet weblog. Thanks for sharing.

  7. Cherekasi film 2020…

    Cherekasi film 2020…

  8. we prefer to honor numerous other web websites around the net, even though they arent linked to us, by linking to them. Underneath are some webpages really worth checking out

  9. below you will discover the link to some sites that we assume you ought to visit

  10. I?аАТ’аЂа†ll right away grab your rss as I can not to find your e-mail subscription link or e-newsletter service. Do you ave any? Please let me recognise in order that I may subscribe. Thanks.

  11. please check out the web pages we comply with, like this 1, because it represents our picks through the web

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha