▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda

custom taglib 만들때 spring bean 사용하기

조회 수 8542 추천 수 0 2012.08.29 16:53:32

custom taglib 만들면서 User 객체 사용하려고 @Autowired 어노테이션이용해서 User 객체를 DI 받았는데

User 객체 값을 찍어보면 계속 null이 나왔다.

public class UserTag extends TagSupport {
    @Autowired
    private User user;
 
    public int doStartTag() throws Exception {
         // user 객체는 null 이 된다.
         System.out.println(user);
        ...
     }
}

 

왜 그럴까 검색에 검색을 해보니 너무도 당연한 거였다 -_-

Spring 기초내공이 부족하니 이런 단순한 개념도 이해를 못했던 것이다.

 

@Autowired 어노테이션 이용한 객체는 Spring 컨테이너에서 생성된 빈이기 때문에 Spring이 관리하는 빈이지만

tag library는 서블릿에서 생성되기때문에 Spring 관리대상이 아니다.

그렇기 때문에 custom taglib 만드는 자바코드에서 @Autowired를 사용해도 객체를 DI 받을수 없었던것이다.

 

 

이거에 대한 해결 방법은 아래와 같이 2가지 방법이 있다. (더 있을수도 있다 -_-)

해결 방법역시 간단하다. WebApplicationContext에 현재 등록된 빈을 찾아서 가져오는거다.

Spring 컨테이너내에서는 Spring 알아서 찾아주지면 그렇지 않은 곳에서는 아래와 같은 방법으로 직접 찾아서 이용하면 된다.

 

1. RequestContextAwareTag를 이용하는 방법

public class UserTag extends RequestContextAwareTag {
    private User user;

    public int doStartTagInternal() throws Exception {
        user = (User) getRequestContext().getWebApplicationContext().getBean(User.class);

        ...
    }
}

2. TagSupport를 이용하는 방법 

public class UserTag extends TagSupport {
    private User user;

    public int doStartTag() throws Exception {
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
        user = ctx.getBean(User.class);

        ...
    }
}

 

 

추가로,

@Configurable 과 Aspect를 이용해서 Spring관리대상이 아닌 빈들은 Spring관리대상으로 포함시켜서 DI 하는 방법이 있다는데 그건 확인 안해봤다.

 

 

 

문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
공지 Spring 3.0 게시판 뭉충닷컴 2011-08-07 4484
25 Spring에서 Session을 이용한 로그인 처리 예제 file [12] 뭉충닷컴 2012-03-02 61189
24 maven을 이용해 배포(Deploy) 대상에 따라서 환경설정(resources) 다르게 적용하기 file [1] 뭉충닷컴 2012-03-03 35016
23 STS의 Spring Template Project를 이용한 간단한 Spring MVC 웹 프로젝트 file [15] 뭉충닷컴 2012-02-29 13621
22 Spring에서 Quartz 이용하기 (스케줄이용방법) file [1] 뭉충닷컴 2012-03-06 13077
21 Spring @Transactional 사용시 rollback이 안될 경우 뭉충닷컴 2012-06-03 12906
20 Root Application Context와 Servlet Context file 뭉충닷컴 2012-02-29 10185
» custom taglib 만들때 spring bean 사용하기 뭉충닷컴 2012-08-29 8542
18 Spring @Transactional 어노테이션을 이용한 트랜잭션 예제 file 뭉충닷컴 2012-06-04 8158
17 HandlerInterceptor 간단한 사용 예제 file 뭉충닷컴 2012-03-08 7813
16 Spring에서 requestURL 가져올때 URL을 /WEB-INF/views/.. 로 가져오는 이유 뭉충닷컴 2012-10-31 7209
15 Spring Controller의 메서드에 사용될수 있는 파라미터 종류 뭉충닷컴 2012-11-01 7153
14 뷰 컨트롤러에서 ModelAndView 개체를 직접 생성하는 방법 뭉충닷컴 2012-03-01 6938
13 Spring MVC 기본 흐름 file 뭉충닷컴 2012-10-23 6677
12 Spring Template Project 이용시 maven 빌드를 제대로 못할경우 file [1] 뭉충닷컴 2012-03-07 6015
11 Spring의 HandlerMapping 종류및 사용방법 file 뭉충닷컴 2012-03-04 5737
10 Spring의 어노테이션 정보 읽기 뭉충닷컴 2012-10-29 5650
9 maven에 ojdbc14 추가하기 뭉충닷컴 2012-06-01 5300
8 한글때문에 xml 파싱시 오류날 경우 (URI$MalformedURIException 오류) file 뭉충닷컴 2012-06-02 5232
7 URL과 Controller 간단하게 연결해주는 HandlerMapping 처리 방법 뭉충닷컴 2012-03-03 4501
6 Spring에서 Bean 등록 여러가지 방법 뭉충닷컴 2012-02-28 4437
5 일반 Spring 프로젝트를 Web 프로젝트로 변경하기 file 뭉충닷컴 2012-03-03 4337
4 STS에서 한글에 String literal is not properly closed by a double-quote 오류가 날 경우 file 뭉충닷컴 2012-07-03 4147
3 component:context-scan으로 설정되어있는 Bean들 확인하는 방법 file 뭉충닷컴 2012-02-24 3016
2 스테레오타입 어노테이션을 이용한 자동 빈 등록 file 뭉충닷컴 2012-02-28 2691
1 Spring AOP (Aspect Oriented Programming) 뭉충닷컴 2012-03-05 2685