레퍼런스 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
38 [POST] Spring MVC 구조 분석 황제낙엽 2024.01.17 1
37 OAuth 2.0 Resource Server - Spring Security OAuth2.0 황제낙엽 2023.12.27 1
36 [시리즈 강좌] 스프링부트로 웹서비스 구축하기 황제낙엽 2023.07.13 3
35 [Spring3.1.1] ResponseBody 한글깨짐 해결법 황제낙엽 2018.08.08 140
34 [Spring3.1.1][4] RestTemplate 한글 문제 황제낙엽 2018.08.08 89
33 [Spring3.1.1][3] RestTemplate 한글 문제 황제낙엽 2018.08.08 237
32 [Spring3.1.1][2] RestTemplate 한글 문제 황제낙엽 2018.08.08 113
31 [Spring3.1.1][1] RestTemplate 한글 문제 황제낙엽 2018.08.08 683
30 NamedParameterJdbcDaoSupport 몇가지 장점 황제낙엽 2007.11.27 101
29 Spring AOP - Pointcut 황제낙엽 2007.10.02 129
28 <spring:checkbox> tip! 황제낙엽 2007.10.01 378
27 스프링 2와 JPA 시작하기 (한글) 황제낙엽 2007.08.27 142
» Spring 2.0의 XML확장기능 (3) 황제낙엽 2007.08.15 32
25 Spring 2.0의 XML확장기능 (2) 황제낙엽 2007.08.15 73
24 Spring 2.0의 XML확장기능 (1) 황제낙엽 2007.08.15 33
23 스프링의 구조별 기능 설명 황제낙엽 2007.06.26 42
22 자바지기 스프링 프레임웍 아티클 황제낙엽 2007.06.04 54
21 AOP(Aspect Oriented Programming) 황제낙엽 2007.06.03 39
20 Spring MVC 어플리케이션 개발 <12> 간단한 조회 구현 방안 비교 황제낙엽 2007.05.27 31