영혼의 손으로 그린 그림 봄 AOP 구현 원리!

: Benpian는 스프링 AOP에 독자가 특정 구현을 참조 따라서, 세부 사항의 일부를 잃고, 매크로의 원칙의 실현을 이해하는 좋은을 할 수 있도록 설계 정직한 사람 봄 소스 디렉토리를
, 독자들이 스프링 AOP와의 봄 IOC의를 (사용하고자이 글을 읽기 전에 특정 이해함으로써 @Aspect)는 말 수가 적은 사람이지도를 직접했다

준비

  • Service클래스 : 방법을 찾기 전에 저장 방법과 캐시 수술 후 방법을 찾기 위해이 필요 메소드 요구 주위 트랜잭션 작업을 저장합니다
  • CacheableAspect클래스 섹션 : 전에 및 서비스의 찾기 방법을 캐싱을위한 수술 후
  • TransctionlAspect섹션 카테고리 : 서비스는 트랜잭션을 운영하기위한 방법을 저장
  • LogAspect화면 클래스 : 컨트롤러 로그 요청 모든
    AOP 준비

스프링 AOP 프록시 자동 타이밍

에서 service빈 (즉, 생성 getBean("service")), AOP는로 BeanPostProcess 포스트 프로세서 개입 작업이
두 가지 경우로 구분된다 :

  1. 사용자 정의 targetSource, 빈이 생성 (인스턴스화, 충전, 초기화) 책임 사용자가가, 봄 IOC의 프록시 대상 객체의없는 팀은 traget이 기본적으로 몇 년, 많은 사람들이 발생하지 않습니다 봄 수도 나는 그것이 존재 모른다
  2. 봄 IOC의 일반적으로 프록시 개체를 완료 target인스턴스화가 초기화를 작성합니다. 대한 그리고, 초기화 후 프로세서에 개입 beanservice프록시가

스프링 AOP 프록시 타이밍

에이전트 운영 wrapIfNecessary 만들기

모든 강조 wrapIfNecessary하고있다 무엇 완료 작업
스프링 AOP 프록시 생성

프록시 메소드 호출

에이전트를 만든 후에, 경우 당신은 메소드를 호출? 우리는 Jdk动态代理예를 들어, 메서드 호출이 트리거하는 invoke방법. 명세서 소스 기본 소스 JDK 다이나믹 프록시
AOP 실행 방법 원리

스프링 AOP 인터셉터의 실행 순서

상기로부터 알 수있는 바와 같이, 스프링 AOP 프록시 invoke방식은 실제로 拦截器구현.
우리는 첫째로, 스프링 AOP의 실행 순서를 보면 LIFO, 같은
인터셉터의 실행 순서

의 원칙의 AOP 인터셉터 구현

그런 다음 인터셉터 체인 및 방법은 보장하기 beforeafter그 전에를? 그러나 또한 보장하기 위해 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를 만났다

개요

스프링 AOP는 봄의 중요한 부분입니다, Benpian은 독자에게 매크로 별 또는 소스 코드를 읽을 필요성에 대한 이해를 제공합니다.

쉽지 페인트, 거물급 문제가주고 칭찬! 그것을 응답 할 것이다, 메시지를 남길 수있는 문제를 이해하지 마십시오, 또한 잘못된 장소를 탐험에 오신 것을 환영있다!
그림 삽입 설명 여기그림 삽입 설명 여기그림 삽입 설명 여기

게시 43 개 원래 기사 · 원 찬양 57 ·은 40000 +를 볼

추천

출처blog.csdn.net/chaitoudaren/article/details/105352273