sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
extra_vars6 |
BeanDefinitionParser를 만드는 것이 XML설정방법을 확장한 custom tag를 만드는 핵심과정이다. 이제는 그 외에 필요한 작업을 알아보자.
Custom Tag 개발순서
- Schema 작성
- NamespaceHandler 개발
- BeanDefinitionParser 개발
- 등록파일 (handler, schema) 작성
Schema 작성
만들고자하는 태그가 포함될 namespace의 schema를 만든다. 툴을 쓰건 직접 만들 건 schema를 만든다. 일반적인 schema 생성방법과 다를 바 하나 없다.
Schema작성방법에 대해서 알고 싶다면 XML 서적을 찾아서 공부하던가 w3c사이트에 나온 다음의 문서를 공부하면 될 것이다. 한시간이면 기초적인 스키마 작성방법을 마스터 하기에 충분하다고 본다.
- XML Schema Part 0: Primer Second Edition
- XML Schema Part 1: Structures Second Edition
- XML Schema Part 2: Datatypes Second Edition
NamespaceHandler 개발
NamespaceHandler는 namespace당 한개씩 필요하다. 각 tag를 담당하는 BeanDefinitionParser를 등록하는 것이 그 역할이다.
public class SampleNamespaceHandler extends NamespaceHandlerSupport {
public void init() {
registerBeanDefinitionParser(”dateformat”, new SimpleDateFormatBeanDefinitionParser());
registerBeanDefinitionParser(”twobeanswithid”, new TwoBeansWithIdBeanDefinitionParser());
}
}
init() 메소드안에 tag이름과 BDP인스턴스를 함께 등록해준다.
BeanDefinitionParser
앞의 글에 적은 내용 그대로.
등록파일 (handler, schema) 작성
META-INF 밑에 다음의 두개의 파일을 작성한다. Spring이 이를 참조해서 bean등록을 담당할 NamespaceHandler를 사용하게 해준다.
- spring.handlers : Namespace URI와 Handler class를 매핑해준다
http://www.epril.com/schema/myns=sample.namespace.SampleNamespaceHandler
- spring.schemas : Namespace URI와 schema 파일을 매핑해준다
http://www.epril.com/schema/myns/myns.xsd=sample/namespace/sampleschema.xsd
이제 개발완료다. Spring 설정파일에 namespace를 추가하고 사용하면 끝.
좀 더 해볼 것
Normal bean에 사용할 수 있는 attribute를 개발할 수 있다. p: 애트리뷰트의 사용이 그 한 예다.
p:를 사용하면 schema 작성 없이 다이나믹하게 애트리뷰트이름을 프로퍼티이름으로 하는 값을 세팅할 수 있다. 이것만 써도 빈 설정이 간단해진다.
<bean id=”a” class=”c”>
<property name=”tel” value=”123″ />
<property name=”addr” value=”seoul” />
<property name=”user” ref=”userbean” />
</bean>
이것을 p attribute를 이용해서 변경하면
<bean id=”a” class=”c” p:tel=”123″ p:addr=”seoul” p:user-ref=”userbean” />
로 바꿀수 있다.
BeanDefinitionDecorator를 이용한 것이다. 말 그대로 이미 설정이 된 bean에 추가적인 데코레이션 작업이 가능하다.
AOP를 이용한 annotation based bean 등록용 tag 개발. 이건 잘 쓰면 아주 편리하다. Annotation기반의 pointcut을 활용해서 대상 bean의 후보를 선택하고 이를 프로퍼티로 설정한다거나 빈을 생성한다거나 등등의 작업이 가능할 것이다.
이 글을 보는 스프링 개발자들에게
블로그에 공부한 내용을 정리할 때는 나름 읽게 될 독자를 고려하고 글을 쓰려고 하지만 그래도 시간을 많이 사용하기는 어렵기 때문에 글을 좀 성의없이 쓴다. -_-; 하지만 한편으로는 이런 글을 남기면 과연 한명이라도 이 글의 도움을 받아서 이 내용을 직접 적용해보고 공부하는 사람이 있을까 의문이기도 하다. 혹시 이 글을 참조로 직접 custom tag를 개발해본 사람이 있다면 댓글이나 이멜을 통해서 알려준다면 앞으로도 이런 글을 많이 올려볼 생각이다.