찾다

 >  Q&A  >  본문

java - 네이티브 CGLib 내부 메소드는 서로 호출할 때 프록시될 수 있지만 CGLib 기반 Spring AOP는 프록시에 실패합니다.

다음은 CGLib의 기본 작성 방법입니다(net.sf.cglib.proxy.* 패키지의 클래스를 사용하여 구현됨)

으아아아

인쇄된 결과는 다음과 같습니다.
before fun1
before fun2
fun2()가 foo.fun1()을 통해 호출되더라도 fun()2는 여전히 프록시될 수 있음을 알 수 있습니다.

그러나 Spring AOP의 기본 작성 방법을 사용하는 경우:

으아아아

출력 결과는 다음과 같습니다.
before fun1
fun2
fun2 메소드가 프록시되지 않았음을 알 수 있습니다.

왜 이런 차이가 나는 걸까요?

phpcn_u1582phpcn_u15822727일 전1205

모든 응답(1)나는 대답할 것이다

  • 阿神

    阿神2017-07-03 11:45:34

    Spring의 AOP는 내부 메소드 호출을 가로챌 수 없습니다. Spring은 프록시 이후에 실제 객체의 Bean과 ProxyBean을 보고합니다. ProxyBean은 다음과 같습니다.
    proxyBean은 다음과 동일합니다.

    invoke(빈, 메소드)

    after

    이런 식으로 fun2는 실제 bean에 의해 실제로 호출되므로(invoke는 실행하려는 메소드를 실행하기 위해 실제 객체를 사용함) 사전 효과가 없습니다.
    실제로 cglib를 사용하면 프로세스 전반에 걸쳐 프록시 Bean을 사용하게 됩니다

    회신하다
    0
  • 취소회신하다