레퍼런스 Spring 2.0의 XML확장기능 (3)

황제낙엽 2007.08.15 07:39 조회 수 : 32 추천:105

sitelink1  
sitelink2  
sitelink3  
extra_vars6  

BeanDefinitionParser를 만드는 것이 XML설정방법을 확장한 custom tag를 만드는 핵심과정이다. 이제는 그 외에 필요한 작업을 알아보자.

Custom Tag 개발순서

  1. Schema 작성
  2. NamespaceHandler 개발
  3. BeanDefinitionParser 개발
  4. 등록파일 (handler, schema) 작성

Schema 작성

만들고자하는 태그가 포함될 namespace의 schema를 만든다. 툴을 쓰건 직접 만들 건 schema를 만든다. 일반적인 schema 생성방법과 다를 바 하나 없다.

Schema작성방법에 대해서 알고 싶다면 XML 서적을 찾아서 공부하던가 w3c사이트에 나온 다음의 문서를 공부하면 될 것이다. 한시간이면 기초적인 스키마 작성방법을 마스터 하기에 충분하다고 본다.

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를 개발해본 사람이 있다면 댓글이나 이멜을 통해서 알려준다면 앞으로도 이런 글을 많이 올려볼 생각이다.

번호 제목 글쓴이 날짜 조회 수
공지 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) 황제낙엽 2023.12.23 0
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 6
63 [Spring3.1.1][4] RestTemplate 한글 문제 황제낙엽 2018.08.08 89
62 [Spring3.1.1][3] RestTemplate 한글 문제 황제낙엽 2018.08.08 237
61 [Spring3.1.1][2] RestTemplate 한글 문제 황제낙엽 2018.08.08 113
60 [Spring3.1.1][1] RestTemplate 한글 문제 황제낙엽 2018.08.08 683
59 [Spring3.1.1] Eclipse 에 Spring Framework 환경 구축하기 file 황제낙엽 2018.08.08 90
58 웹 개발의 변화와 스프링 황제낙엽 2008.03.19 132
57 Spring MVC 가 아닌 환경에서 Spring Pojo Bean 사용하기 (Pure Java App 또는 Servlet App) 황제낙엽 2009.10.22 233
56 NamedParameterJdbcDaoSupport 몇가지 장점 황제낙엽 2007.11.27 101
55 프로젝트의 기본이 되는 Logging, Exception 처리 전략 황제낙엽 2007.01.30 85
54 Spring AOP - Pointcut 황제낙엽 2007.10.02 129
53 <spring:checkbox> tip! 황제낙엽 2007.10.01 378
52 SimpleFormController 정리 황제낙엽 2007.09.19 206
51 Spring의 Exception 황제낙엽 2007.09.17 194
50 스프링 2와 JPA 시작하기 (한글) 황제낙엽 2007.08.27 142
49 스프링 개발팁 황제낙엽 2007.08.17 223
48 유효성체크 (org.springframework.validation.Validator) 황제낙엽 2007.08.17 129
» Spring 2.0의 XML확장기능 (3) 황제낙엽 2007.08.15 32
46 Spring 2.0의 XML확장기능 (2) 황제낙엽 2007.08.15 73
45 Spring 2.0의 XML확장기능 (1) 황제낙엽 2007.08.15 33
44 CSS와 XHTML을 사용한 효율적인 View 개발 전략 황제낙엽 2007.01.30 104