본문 바로가기

스프링

커스텀컨트롤러_핸들러인터셉터_어노테이션

1.     Com.springsource.javax.activation : Spring java-mail

2.     Com.springsource.javax.mail : Spring java-mail

3.     Com.springsource.org.aopalliance : Spring ProxyFactoryBean

4.     Com.springsource.org.aspectj.tools : AspectJExpressionPointcut 포인트컷 표현식 지원

5.     Com.springsource.junit : junit

6.     Commons-logging : Spring-context가 사용

7.     Mail : java-mail

8.     Mockito : 목 프레임워크 중 Mockito

9.     Mysql-connector : Mysql JDBC

10.   Org.springframework.context.support : Spring java-mail

11.   Spring-aop : 스프링 기능 자체의 aop, Spring ProxyFactoryBean

12.   Spring-bean : 스프링 코어와 함께 의존성 주입 제공 (Core Container)

13.   Spring-context : 스프링 코어, BeanFactory를 확장한 어플리케이션 컨텍스트 구현, 리소스 로드 및 국제화 지원(Core Container)

14.   Spring-core : 다른 스프링 모듈이 사용하는 유틸리티(Core Container)

15.   Spring-expression : EL 확장 Bean속성(배열, 컬렉션 포함).(Core Container)

16.   Spring-jdbc : 스프링이 지원하는 jdbc.

17.   Spring-test.jar

-       @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.

-       SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스

-       @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일

18.   Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션

19.   Spring-web : ContextLoaderListener 내장 루트 컨텍스트(서비스,DAO)

20.   Spring-webmvc : SpringMVC를 위한 리졸버, 모델앤뷰 등 지원

 

테스트 디스패처 서블릿을 만들기 위한 과정

 

* XML 설정 대신 AbstractDispatcherServletTest를 사용

25. DispatcherServlet 초기화시 ServletConfig 오브젝트를 만들어 초기화해야함.

50. ContextRoot 값이 있을 때 추가해줌

54. setServletPath : 컨텍스트 root를 넣을 수 있도록 셋팅

58. requesturi 정보와 get,post mothod 셋팅 및 리스판스 객체 생성

 

81. 테스트 DispatcherServlet Init

 

 

27. 디폴트 핸들러가 아닌 내가 커스텀한 핸들러를 적용하려면 위처럼 빈으로 등록시킴. 스프링 핸들러는 컨트롤러전에 발동됨.

37. model맵은 미리 만들어진 것을 전달 받았으니 별도로 생성할 필요없이 필요한 정보를 넣어주기만 하면된다.

 

*DispatcherServlet의 호출을 받아서 실제 컨트롤러의 메소드를 호출해주는 어댑터 역할을 하는 handler() 메소드.

*순서 : DispatcherServlet은 현재 등록된 모든 핸들러 어댑터의 supports() 메소드를 호출해서 HelloController 타입을 처리할 수 있는지 물어본다. 이때 SimpleHandlerAdapter가 지원해줄 수 있다고 확인할 것이고, handler() 메소드를 호출해서 HelloController를 실행한다.

47~49. SpringReflectionUtils를 통해 메소드, 메소드의 뷰네임, 필수 파라미터를 가져온다.

67. getLastModified() : 최종 수정일 필드값을 반환하는데 쓰이는듯..

71. 독자적인 컨트롤러를 만들어보자. 그런데 인터페이스를 이용하는 경우 필수 파라미터 목록과 뷰 이름을 지정할 수 있는가? 적절한 대안은 애노테이션이다.

76. 뷰 이름을 지정하는 애노테이션 정의. 기본값으로 문자열로 된 뷰 이름을 넣어줘야한다.

74,79. @Retention : 어노테이션의 Life Time.

> 인터페이스를 이용하는 경우 뷰이름, 파라미터 목록은 어노테이션 전에는 지정할 수 없었지만, 어노테이션을 지정하면 매우 적절한 대안이 된다.

1) RUNTIME: 어노테이션 정보가 폐지되지 않는다. JVM의 런타임시 참조 가능. 리플렉션으로 사용가능.

2) CLASS : default. 클래스 파일에 저장되지만, 이후 JVM 런타임시 폐지됨.(바이트파서, byteInputStream등으로 읽어들여 작업시)에서 사용됨)

* 파서(parser) : XML java 객체로 변환 등의 해석해주는 프로그램

3) SOURCE : 어노테이션 정보가 컴파일시 사라짐. 바이트 코드에 존재하지 않음. (@Override, @SuppressWarning)

만약 @Override를 생략했다면 super 클래스 수정이 있어, super만 수정하고 집에 가버리면 개발자는 모르고 퇴근할 수 있다. 이런 부분을 런타임시 미리 알려줘서 이런 사건을 방지 가능.

75,80. Inherited : 자식 클래스가 어노테이션을 상속 받을 수 있음.

81. 필수 파라미터 이름을 정의해주는 애노테이션

> 스프링의 애노테이션 지원 핸들러 어댑터는 다양한 환경과 상황을 모두 지원할 수 있도록 유연성을 극대화해서 만들어진 것이라 복잡하지만 기본적인 개념과 구현방법은 위의 심플어댑터와 다를바 없다.