Whiteship's Note


Spring MVC에서 사용하는 ApplicationContext와 WebApplicationContext



보통 스프링 설정 파일이 최소한 두 개이상 있을 겁니다. xxx-servlet.xml 과 나머지로 나눌 수 있습니다. 그중에서 xxx-servlet.xml은 DispatcherServlet이 WebApplicationContext를 만들 때 사용하고, 나머지는  ContextLoaderListener 또는 ContextLoaderServlet이 일반적인 ApplicationContext를 만들 때 사용합니다.

이게 끝이 아닙니다. WebApplicationContext는 바로 이 ApplicationContext를 상속받아서 여러 서블릿들이 공통으로 사용하는 빈들을 사용할 수 있게 되는 겁니다. 따라서 만들어지는 순서도 중요한데, Listener가 아니라 ContextLoaderServlet을 사용했을 때는 load 머시기 설정 값에 1을 줘서 DispatcherServlet보다 먼저 만들게 해야 합니다. 그래서 WebApplicationContext를 만들 때 해당 ApplicationContext를 상속받아서 그 안에 있는 빈들을 사용할 수 있게 되겠죠.

이런 구조로 설계한 건, DispatcherServlet이 하나의 웹 애플리케이션에서 여러 개일 수 있기 때문입니다. 여러 개의 DispatcherServlet에서 공통으로 사용할 빈들을 상위에 있는 ApplicationContext에 선언해두고 공유할 수 있게 하는 거죠.

사용자 삽입 이미지

자. 그럼 여기서 문제

만약에 스프링 2.5 컨트롤러를 사용하고 있고 이 컨트롤러에 특정 @Aspect를 적용하고 싶을 때 해당 AOP 관련 설정(aop:autoproxy 머시기 엘리먼트 + @Aspect 빈 등록)은 xxx-servlet.xml과 applicationContext.xml 둘 중 어디에 둬야 할까요?

xxx-servlet.xml에는 컨트롤러 설정, 뷰 리졸버, 핸들러 맵퍼 등의 설정이 되어 있고, applicationContext.xml에는 서비스, DAO 등의 설정이 들어있습니다.
 
ㄱ. xxx-servlet.xml
ㄴ. applicationContext.xml
ㄷ. 어디에 두든지 상관없다.
ㄹ. 스프링 2.5 컨트롤러에는 Spring AOP를 사용할 수 없다.

정답은?? ㄱ 입니다. 왜냐면, applicationContext.xml을 사용해서 ApplicationContext를 만드는 순간에는 컨트롤러들이 미쳐 빈으로 등록되어 있지도 않기 때문에, 프록시를 만들 대상이 없습니다. 다시 말해, AOP 빈은 있지만, 이 AOP를 적용할 대상이 되는 빈이 없는겁니다. 따라서 컨트롤러들과 관련된 설정이 있는 xxx-servlet.xml에 해당 설정을 위치해야 합니다.

'Spring MVC > 3장 Spring MVC' 카테고리의 다른 글

Spring MVC에서 사용하는 ApplicationContext와 WebApplicationContext  (6) 2008.07.03
Service Layer  (2) 2006.12.13
Web Layer  (0) 2006.12.12
User Interface Layer  (0) 2006.10.09
Layers of Abstractions  (0) 2006.10.08
top


20080702 GMP

모하니?/GMPing : 2008.07.02 10:00


News

Competition 컴ㅍ티션
Nation 네이시언
National 네셔널
Purpose 펄포스
Charter 챠러: 헌장, 전세낸(rented)
Stress : 강조하다
Patriotism 페이트리오티즘

While the olympic charter stresses pieceful competition, it is also a time of suging national pride. Patiorism can give athletes sense of purpose beyond personal acheivement.

Screen English

Why are you smiling?
I just never thought I'd here you say 'what about my studies'. It makes me like.. smile.(그게 말이지 음.. 날 좀 웃게 만드는 구나.)
I don't wanna go.
We do this every year.
It's the only time we get together.

응용
Why are you giving up so easyly?
I just never thought I'll be so luckly.

Pops English(Wake Me Up Before You Go-Go)

Wake me up before you go go.
Don't leave me hanging on like a yo-yo.

Wake me up before you go go.
I don't wanna miss it when you hit that high.

Talk Play Learn

Do you know what I like?
Do you know what I see?
Do you know what I want?
Do you know what I have?
Do you know what I mean?
Do you know what I admire?
Do you know what I like the most?
Do you know what I hate the most?

Sound Sound Play(s다음에 오는 t발음)

stop 스땁
style 스따일
store 스또어
story 스또리
start 스따트
stock 스딱
status 스떼이터스: 지위, 신분

I don't know much about stocks.

Learn Mores

간단히 말하자면.. =  In a nut shell
대략난감 = No way out



'모하니? > GMPing' 카테고리의 다른 글

20080715 GMP  (0) 2008.07.15
20080710 GMP  (0) 2008.07.10
20080708 GMP  (0) 2008.07.08
20080707 GMP  (0) 2008.07.07
20080705 GMP  (0) 2008.07.05
20080704 GMP  (0) 2008.07.04
20080703 GMP  (0) 2008.07.03
20080702 GMP  (0) 2008.07.02
20080701 GMP  (0) 2008.07.01
20080627 GMP  (0) 2008.06.27
20080626 GMP  (0) 2008.06.26
top

TAG GMP

Ivy로 메이븐 저장소를 사용하기



Maven이 의존성 관리나, 다양한 플러그인들, 기본 와꾸 만들어주기(아키타입) 등의 기능 면에서 좋긴 한데, 학습 곡선 높고(Ant에 비해), 적응 시간이 오래 걸린다는(역시 Ant에 비해) 단점이 있습니다.

의존성 관리는 사실 사람이 개입하지 않고서 자동으로 처리하기는 참으로 난감한데, 그래도 초기에 한 번 고생하고, 주기적으로 한 시간간 정도만 고생하면 모든 라이브러리들을 CVS나 SVN에 들고다니지 않아도 되서 정말 편합니다. 구글코드 같은 경우 jar 파일을 다운로드/업로드 하다가 인터넷 연결 끊어져서 다시 커밋하거나 업데이트 받아야 하는 불상사가 생기기도 하죠. 따라서, 어찌됐든 의존성들은 버전 관리 저장소에서 빼주는게 훨씬 편합니다. 그러면서도 버전관리까지 해주는 Maven이 고맙기도 하지만, 사실 개발자가 고생한거지 Maven은 그냥 시킨대로 해줬을 뿐입니다. 그래도 하나 고마운게 있다면, 저장소. 로컬 저장소에 없으면 원격 저장소에서 다운로드 받을 수 있는 그 저장소가 좋습니다.

그런데 Ant에서도 이 메이븐 저장소(본문에서는 Common Repository라는 단어를 사용하고 있는데, 메이븐만 이용할 수 있는 저장소가 아니니까 이게 더 맞는 표현 같네요. 번역은 "공공 저장소" 라고 하고 있습니다.)를 이용할 수 있습니다. 따라서 굳이 Maven을 학습하지 않고 Ant 서브프로젝트인 Ivy의 task 몇 개만 살펴보시면 됩니다.

http://www.ibm.com/developerworks/java/library/j-ap05068/index.html

현재 번역 중이며 7월 중에 IBM DeveloperWorks에 올라갈 것 같네요.

top


이클립스 가니메데 플러그인 설치가 달라졌다.

Good Tools : 2008.07.01 21:52


우선 Eclipse를 받아서 실행했습니다. 다음은 필요한 플러그인들을 설치해야겠죠.

스프링 IDE 업데이트 사이트를 추가해봤습니다.
http://springide.org/updatesite

그랬더니..
사용자 삽입 이미지
자동으로 Spring IDE 플러그인이 의존하는 다른 플러그인 사이트가 등록됩니다. 오호... 플러그인 설치 화면도 약간 달라졌죠. 세부 메뉴를 보여줍니다. 그 뒤 설치 과정은 이전과 동일합니다.
사용자 삽입 이미지
설치가 다 되면, 재시작합니다.

사용자 삽입 이미지

귿.
top


HP 컬러레이저젯 이벤트 하네요.





체험단을 1215명이나 모집해서 1215였군요. 체험단에 들면 프린터를 주는건가~ 오호~
top


엑셀 시트 복사하기(with POI) + 리팩터링

모하니?/Coding : 2008.07.01 13:09


    private void copySheet(HSSFSheet from, HSSFSheet to) {
        HSSFRow firstRow = from.getRow(0);
        HSSFRow secondRow = from.getRow(1);
        HSSFRow thirdRow = from.getRow(2);
        
        HSSFRow firstRow2 = to.createRow(0);
        HSSFRow secondRow2 = to.createRow(1);
        HSSFRow thirdRow2 = to.createRow(2);
        
        Iterator<HSSFCell> iterator = firstRow.cellIterator();
        short col = 0;
        while(iterator.hasNext())
            addCell(firstRow2, col++, iterator.next().getStringCellValue());
        
        col = 0;
        iterator = secondRow.cellIterator();
        while(iterator.hasNext())
            addCell(secondRow2, col++, iterator.next().getStringCellValue());

        col = 0;
        iterator = thirdRow.cellIterator();
        while(iterator.hasNext())
            addCell(thirdRow2, col++, iterator.next().getStringCellValue());
    }

무려 세 번이나 중복되고 있지만, 일단 기능이 제대로 돌아가는지부터 보려고 허겁 지겁 코딩을 하고 결과를 확인해 보니 괜춘하네요. 여기서 그만 둘까도 생각했지만, 에이~ 뭐 시간도 많은데 저런걸 그냥 두긴 뭐하다 싶어서 리팩터링..

    private void copySheet(HSSFSheet from, HSSFSheet to, int fromRowCnt, int toRowCnt) {
        HSSFRow fromRow = null;
        HSSFRow toRow = null;
        for(int i = fromRowCnt ; i <= toRowCnt ; i++){
            fromRow = from.getRow(i);
            toRow = to.createRow(i);
            Iterator<HSSFCell> iterator = fromRow.cellIterator();
            short col = 0;
            while(iterator.hasNext())
                addCell(toRow, col++, iterator.next().getStringCellValue());
        }
    }

리팩터링 하는 김에 좀 더 Generic하게 만들어서 몇 번째 줄부터 몇 번째 줄까지 복사할지 인자로 넘겨주도록 수정 함. 이제 저 메소드는 ExcelUtils로 옮기면 ExelView쪽 코드는 약간 더 깔끔해지겠죠. 그건 뭐 간단하니 생략합니다.
top


20080701 GMP

모하니?/GMPing : 2008.07.01 09:46


News

feet: 건장한, 발(복수형)
heel: 신발 뒤 축
bare: 벗은
-itis: -염증

Screen English(Dan in love)

I'll pack up the car = I'll load the car. Pick you up right after school and then we'll drive streight throw.
Sound good. does not.
What now~ Ins't the whole point that we go to school.
And now you are forcing us to miss school when we should be in school.

Sounds good. = That's it. = Sounds great.

Ins't the whole point that ~~?: 전체 요점이 ~~ 아닌가요?
Ins't the whole point that we enjoy our life?

forcing ~ to: 강요하다
You are forcing us to be upset we you.

Talk Play Learn

Do you know anyone who can ~ ? ~ 할 수 있는 사람 아니?
Do you know anyone who can cook?
Do you know anyone who can drive?
Do you know anyone who can help us?
Do you know anyone who can run faster?
Do you know anyone who can come by?
Do you know anyone who can speak English?
Do you know anyone who can play the piano?
Do you know anyone who can fix my computer?

Sound Sound Play

s다음에 p가 오면 "스쁘"

spread 스쁘레드: 넓게 바르다
speak 스삨
spill 스삘: 업지르다
speed 스삐드
special 스뻬셜
spoil 스뽀일: 망치다.
sports 스뽈츠

Today Expression

two over kind 같은 종류의 두 사람

'모하니? > GMPing' 카테고리의 다른 글

20080715 GMP  (0) 2008.07.15
20080710 GMP  (0) 2008.07.10
20080708 GMP  (0) 2008.07.08
20080707 GMP  (0) 2008.07.07
20080705 GMP  (0) 2008.07.05
20080704 GMP  (0) 2008.07.04
20080703 GMP  (0) 2008.07.03
20080702 GMP  (0) 2008.07.02
20080701 GMP  (0) 2008.07.01
20080627 GMP  (0) 2008.06.27
20080626 GMP  (0) 2008.06.26
top

TAG GMP

Yaari 라는 메일에 온 링크로 가지 마세요~



에구구 저는 또 뭔 새로운 SNS 사이트인 줄 알고 가입하려다 보니까, 미팅 사이트라고 하네요. ㄷㄷㄷ
제 메일 주소록에 있던 분들에게 메일이 보내진 것 같은데 죄송합니다.
사용자 삽입 이미지

top

TAG yaari, 스팸



: 1 : 2 : 3 : 4 :