: Benpian는 스프링 AOP에 독자가 특정 구현을 참조 따라서, 세부 사항의 일부를 잃고, 매크로의 원칙의 실현을 이해하는 좋은을 할 수 있도록 설계 정직한 사람 봄 소스 디렉토리를
, 독자들이 스프링 AOP와의 봄 IOC의를 (사용하고자이 글을 읽기 전에 특정 이해함으로써 @Aspect)는 말 수가 적은 사람이지도를 직접했다
준비
Service
클래스 : 방법을 찾기 전에 저장 방법과 캐시 수술 후 방법을 찾기 위해이 필요 메소드 요구 주위 트랜잭션 작업을 저장합니다CacheableAspect
클래스 섹션 : 전에 및 서비스의 찾기 방법을 캐싱을위한 수술 후TransctionlAspect
섹션 카테고리 : 서비스는 트랜잭션을 운영하기위한 방법을 저장LogAspect
화면 클래스 : 컨트롤러 로그 요청 모든
스프링 AOP 프록시 자동 타이밍
에서 service
빈 (즉, 생성 getBean("service")
), AOP는로 BeanPostProcess 포스트 프로세서 개입 작업이
두 가지 경우로 구분된다 :
- 사용자 정의
targetSource
, 빈이 생성 (인스턴스화, 충전, 초기화) 책임 사용자가가, 봄 IOC의 프록시 대상 객체의없는 팀은traget
이 기본적으로 몇 년, 많은 사람들이 발생하지 않습니다 봄 수도 나는 그것이 존재 모른다 - 봄 IOC의 일반적으로 프록시 개체를 완료
target
인스턴스화가 초기화를 작성합니다. 대한 그리고, 초기화 후 프로세서에 개입bean
즉service
프록시가
에이전트 운영 wrapIfNecessary 만들기
모든 강조 wrapIfNecessary
하고있다 무엇 완료 작업
프록시 메소드 호출
에이전트를 만든 후에, 경우 당신은 메소드를 호출? 우리는 Jdk动态代理
예를 들어, 메서드 호출이 트리거하는 invoke
방법. 명세서 소스 기본 소스 JDK 다이나믹 프록시
스프링 AOP 인터셉터의 실행 순서
상기로부터 알 수있는 바와 같이, 스프링 AOP 프록시 invoke
방식은 실제로 拦截器
구현.
우리는 첫째로, 스프링 AOP의 실행 순서를 보면 栈
LIFO, 같은
의 원칙의 AOP 인터셉터 구현
그런 다음 인터셉터 체인 및 방법은 보장하기 before
에 after
그 전에를? 그러나 또한 보장하기 위해 find
실행 방법의 순서를? 자세한 내용은 참조하십시오 위한 MethodInvocation의 원리를 호출 인터셉터
차트 주어진 당신은 단지 아이디어 얻을 수 있습니다, 원칙의 실현이 부분은 끝없는 몇 마디로 설명
소스 인터셉터 콘크리트 :
public class MethodBeforeAdviceInterceptor implements MethodInterceptor, BeforeAdvice, Serializable {
private final MethodBeforeAdvice advice;
@Override
public Object invoke(MethodInvocation mi) throws Throwable {
// 先调用before方法
this.advice.before(mi.getMethod(), mi.getArguments(), mi.getThis());
// 继续链式调用
return mi.proceed();
}
}
public class AfterReturningAdviceInterceptor implements MethodInterceptor, AfterAdvice, Serializable {
private final AfterReturningAdvice advice;
@Override
public Object invoke(MethodInvocation mi) throws Throwable {
// 先进行链式调用
Object retVal = mi.proceed();
// 再调用afterReturning方法
this.advice.afterReturning(retVal, mi.getMethod(), mi.getArguments(), mi.getThis());
return retVal;
}
}
피날레 제목 : 스프링 AOP는 순환 종속성을 충족
열 별 난이도의 부분은, 가장 복잡한 부분의 스프링 소스로 간주, 이것은 알리의 수준에 도달 봄의 이해의 의미를 말할 수있다. 여기 몇 마디로 설명하는 것은 불가능하고, 단지지도를 게시, 우리는 매크로의 지식을 가지고, 자세한 사항 스프링 AOP는 순환 종속성을 충족
개요
스프링 AOP는 봄의 중요한 부분입니다, Benpian은 독자에게 매크로 별 또는 소스 코드를 읽을 필요성에 대한 이해를 제공합니다.
쉽지 페인트, 거물급 문제가주고 칭찬! 그것을 응답 할 것이다, 메시지를 남길 수있는 문제를 이해하지 마십시오, 또한 잘못된 장소를 탐험에 오신 것을 환영있다!