공부/Spring

Spring 개발환경 설정 정리2[AOP, intercepter]

JangGiraffe 2016. 12. 7. 21:35


>>AOP

 

1. AOP 관련 라이브러리 추가,(spring-tx :트랜잭션 처리를 위한 라이브러리)

               <!-- 트랜잭션 처리 -->

               <dependency>

                      <groupId>org.springframework</groupId>

                      <artifactId>spring-tx</artifactId>

                      <version>${org.springframework-version}</version>

               </dependency>

               <!-- AOP관련 라이브러리 -->

               <dependency>

                      <groupId>org.springframework</groupId>

                      <artifactId>spring-aop</artifactId>

                      <version>${org.springframework-version}</version>

               </dependency>

 

2. AOP기능 적용을 위해서는 AspectJ 언어의 문법을 이용함. >라이브러리 추가

               <!-- AspectJ -->

               <dependency>

                      <groupId>aspectj</groupId>

                      <artifactId>aspectjrt</artifactId>

                      <version>1.5.4</version>

               </dependency>

              

               <dependency>

                      <groupId>aspectj</groupId>

                      <artifactId>aspectjweaver</artifactId>

                      <version>1.5.4</version>

               </dependency>

 

3. root-context.xml 설정

aop,context,mybatis-spring,tx에 체크

        <context:component-scan base-package="org.zerock.persistence"></context:component-scan>

        <context:component-scan base-package="org.zerock.service"></context:component-scan>

        <context:component-scan base-package="org.zerock.aop"></context:component-scan>

       

        <aop:config></aop:config>

        <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

 

 

 

>>Interceptor

 

단순 로그인 처리를 하는 가장 간단한 방법은 Servlet Filter와 유사한 인터셉터(Interceptor)를 활용하는 방법이다.

인터셉터는 웹 애플리케이션 내에서 특정한 URI 호출을 가로채는 역할을 함.

기존 컨트롤러의 로직을 수정하지 않고도 사전이나 사후 제어가 가능함.

FilterInterceptor

 

Filter와 인터셉터는 특정 URI에 접근할 때 제어하는 용도로 사용되나 가장 큰 차이는. Interceptor는 스프링에서 관리되기 때문에 스프링 내의 모든 객체()에 접근이 가능함.

 

Spring AOP 기능과 HandlerInterceptor의 차이

 

사전,혹은 사후 처리기능을 둘다 할 수 있지만 일반적인 경우라면 인터셉터를 활용한다.

Advice의 경우 JointPoint ProceedingJointPoint 등을 활용해서 호출 대상이 되는 메소드의 파라미터 등을 처리하는 방식임.

인터셉터는 Filter와 유사하게 HttpServletRequest, HttpServletResponse를 파라미터로 받는 구조임.

 

-------------------------------------------

환경설정

servlet-context.xml - SampleInterceptor.java org.zerock.interceptor 패키지에 만든 상태임.

SampleInterceptor를 스프링에 인식하려면 servlet-context.xml에 설정을 추가해야함. 인터셉터의 경우 URI설정이 추가됨.

각 인터셉터의 <mapping>에는 원하는 URI를 지정함. ** *와 같은 패턴을 적용할 수 있다.

 

XXXInterceptor.java 파일의 경우 HandlerInterceptorAdapter를 상속받아 메소드를 오버라이드 해서 사용한다.

postHandle 메소드 : 컨트롤러 동작 이후에 처리. Spring MVC Front Controller DispatcherServlet이 화면을 처리하기 전에 동작.

preHandle 메소드 : 컨트롤러 동작 이전에 가로채는 역할로 사용 가능

afterCompletion 메소드 : DispatcherServlet의 화면처리가 완료된 상태에서 처리

       <!-- 인터셉터 설정 -->

       <beans:bean id="sampleInterceptor" class="org.zerock.interceptor.SampleInterceptor"></beans:bean>

      

       <interceptors>

               <interceptor>

                      <mapping path="/doA"/>

                      <mapping path="/doB"/>

                      <beans:ref bean ="smapleInterceptor"/>

               </interceptor>

       </interceptors>

 


public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

에서 handler 현재 실행하려는 메소드 자체를 의미합니다.

 


반응형