Spring Custom XML Namespace 만들기 1. 사전 조사
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 확장에 대해서는 이 글 만한 한글 자료가 없다.(두번째 글에 이미지가 링크가 꺠진게 약간 아쉽다.)
일단 레퍼런스를 보기전에 토비님 글을 쭉 읽어봤다. 대략 이런 순인것 같다.
- 커스텀 빈 구상
- BeanDefinition 파서 구현
- XML 스키마 작성
- 네임스페이스 핸들러 작성
- 네임스페이스 핸들러와 스키마 등록
우선 커스텀 네임스페이스를 이용해 등록할 빈이 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에 넣어두는 것인데.. 이 부분이 쬐금.. 불편하게 느껴진다. 좀 더 편한 방법은 없을런지..
내일은 레퍼런스도 봐야겠다. 어흑 언능 씻고 나가야지.