ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024.09.20 filter, interceptor, aop
    TIL 2024. 9. 20. 15:37

    filter, interceptor, aop의 차이

     

    기능적인 차이를 보자면..

     

    filter는 servlet container에서 동작하기 때문에 무슨 메소드가 실행되는지 모른다.

    interceptor의 prehandle은 handler adaptor 전에 실행되는 것 이기 때문에 handler method를 구할 수 있다.

    https://github.com/spring-projects/spring-framework/blob/e587753b1d78f16620b6efa69cecc7069e2466ea/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java#L1083

     

    aop는 좀 다른게 단순 request에만 적용할 수 있는 게 아닌 모든 layer 메소드에 걸 수 있다. 

     

     

    interceptor에서 afterCompletion의 차이

    postHandle은 예외 때문에 실행이 안될 수 있다.

    무조건 실행되어야한다면 afterCompletion을 사용하면 된다.

    https://github.com/spring-projects/spring-framework/blob/e587753b1d78f16620b6efa69cecc7069e2466ea/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java#L1183

     

    범위는 잘 알려져 있는데 filter는 tomcat에서(sevlet container)동작하고 그 이후에 Dispatcher servlet이 동작한다.

    interceptor는 spring context에서 동작하는데 위의 코드 처럼 handler adaptor전에 동작하는 것을 알 수 있다.

    https://github.com/spring-projects/spring-framework/blob/159e23730c3a10a48d91bc5c0fdcbb95c528312e/spring-aop/src/main/java/org/springframework/aop/framework/CglibAopProxy.java#L367

    aop는 spring aop를 사용하면 cglib를 동해 구현되는데, proxy패턴으로 동작한다. 

    adaptor가 실행을 시키면 proxy기 때문에 proxy가 동작한다. proxy안에는 chains을 조회해서 method interceptor들을 실행시킨다.

    'TIL' 카테고리의 다른 글

    2024.10.05 NAT  (0) 2024.10.05
    2024.09.21 java-acquire-lock-by-key  (0) 2024.09.22
    2024.09.16 JDBC Internal - 타임아웃의 이해  (0) 2024.09.16
    2024.09.13 hikaricp autoreconnect  (0) 2024.09.14
    2024.09.12 Check If a Username  (0) 2024.09.12

    댓글

Designed by Tistory.