@Aspect public class Aspect { @Before("execution(* com.test.*.*(..))") public void logBefore(JoinPoint joinPoint) { logEnter..... } @After("execution(* com.test.*.*(..))") public void logAfter(JoinPoint joinPoint) { logExit..... } }
Spring config:
<aop:aspectj-autoproxy/> <bean id="aspect" class="com.test.Aspect"></bean>
최근에 프로젝트 하나를 개발했는데, 전체 개발 과정에서 프로젝트가 급하게 진행되다가(모든 프로젝트가 거의 동일함) 프로젝트 진행 중에 시스템 로그 기능이 누락된 것을 발견했습니다. 이전 단계에서는 시스템이 각 모듈의 코드에 직접 작성된 다음 로그의 일부를 페이지에서 볼 수 있습니다. 이 시스템에는 이러한 요구 사항이 없으므로 시스템 전체의 로그 기록을 만들려고 생각했습니다. 주요 기록 데이터에는 작업 시간, 작업 개체, 작업 방법, 작업의 일부 매개 변수 및 작업 결과가 포함됩니다. 처음에 즉시 생각한 것은 Aop Logging을 구현하기 위해 Aspect를 사용하는 것이었지만, 실제 애플리케이션에서는 Aspect가 친숙한 방식으로 작업을 가로챌 수 없으며 주로 서비스 계층 비즈니스를 가로채는 데 사용된다는 것을 알았습니다. 시스템 프레임워크는 ssh 프레임워크를 기반으로 하기 때문에 마침내 struts2의 내장 인터셉터인 Interceptor를 사용하는 것을 고려했습니다.
무슨 인터셉터?
Interceptor는 Action 호출을 동적으로 가로채는 객체입니다. 개발자가 액션 실행 전후에 실행할 코드를 정의하고, 액션이 실행되기 전에 액션 실행을 방지할 수 있는 메커니즘을 제공합니다. 또한 작업의 재사용 가능한 부분을 추출하는 방법도 제공합니다. 인터셉터에 대해 말하면, 모두가 알아야 할 또 다른 단어가 있습니다. 인터셉터 체인(Interceptor Chain, Struts 2에서는 인터셉터 스택이라고 함)입니다. 인터셉터 체인은 인터셉터를 일정한 순서로 체인에 연결하는 것입니다. 인터셉트된 메서드나 필드에 액세스하면 인터셉터 체인의 인터셉터가 이전에 정의된 순서대로 호출됩니다.
인터셉터의 원리와 일반적인 프로세스
1. ActionInvocation이 초기화되면 해당 Action과 관련된 모든 인터셉터가 구성에 따라 로드됩니다.
2. ActionInvocation.invoke 메소드를 통해 Action 구현이 호출되면 Interceptor가 실행됩니다.
인터셉터는 Action에서 많은 기능을 분리하여 Action의 코드를 크게 줄이고 독립적인 동작은 재사용성이 좋습니다. XWork와 WebWork의 많은 기능은 Interceptor에 의해 구현됩니다. Action이 사용하는 Interceptor를 구성 파일에 어셈블할 수 있습니다. Action 실행 전후에 지정한 순서대로 실행됩니다.
위 내용은 메소드 진입 및 종료 로깅을 구현하기 위해 Aspect를 사용한 경험 공유에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!