http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/extensible-xml.html

스프링 2.0부터 커스텀 XML 빈 설정 파서를 작성해 스프링 IoC 컨테이너에 연동할 수 있었다.

이 기능은 사실 최초의 Epril 세미나이자 KSUG의 시발점이 되었던 세미나에서 토비님이 발표하셨던 내용이다.

Spring 2.0의 XML 확장기능(1) Spring 2.0의 XML 확장기능(2) Spring 2.0의 XML 확장기능(3)

벌써 3년도 훌쩍넘어 4년이 거의 다 되가는 글인데 XML 확장에 대해서는 이 글 만한 한글 자료가 없다.(두번째 글에 이미지가 링크가 꺠진게 약간 아쉽다.)

일단 레퍼런스를 보기전에 토비님 글을 쭉 읽어봤다. 대략 이런 순인것 같다.

  1. 커스텀 빈 구상
  2. BeanDefinition 파서 구현
  3. XML 스키마 작성
  4. 네임스페이스 핸들러 작성
  5. 네임스페이스 핸들러와 스키마 등록

우선 커스텀 네임스페이스를 이용해 등록할 빈이 top-level 빈 한개 인지, top-level 빈 한개와 거기에 속해있는 inner 빈까지 등록할 것인지, top-level 빈을 여러개 등록할 것인지 등에따라 달라지며 또 두번쨰 경우였던 top-level 한개와 그 안에 inner 빈이 등록되는 경우에는 inner 빈들도 BeanFactory에 등록할지 여부에 따라 구현 방법이 또 조금 다른것 같다.

그러니 커스텀 네임스페이스로 간추릴 빈 설정을 파악하는게 중요하고 그 뒤엔 거기에 맞는 클래스를 사용해 BeanDefinitionParser를 구현하면 되겠다. 친절하게 각 경우에 따른 예제까지도 올려주셨다.

그 다음은 XML 스키마를 작성하는 일인데 이게 쬐금 귀찮다. XML 스키마를 직접 작성해본건 5년전 쯤 대학교에서 과제로 한번 해본게 다다. 그런데 역시나 또 친절하시게도 XML 스키마 작성 방법에 관한 링크도 걸어두셨다.

다음은 BeanDefinitionParser와 그 parser가 처리할 태그를 NamespaceHandler라는 것으로 매핑해주는 것이다.

마지막으로는 이 네임스페이스 핸들러를 spring.handlers라는 파일에 작성해주고 네임스페이스는 spring.schemas 라는 파일에 작성해 두 파일을 META-INF에 넣어두는 것인데.. 이 부분이 쬐금.. 불편하게 느껴진다. 좀 더 편한 방법은 없을런지..

내일은 레퍼런스도 봐야겠다. 어흑 언능 씻고 나가야지.