cglib 에이전트 의 간단 한 사용

7225 단어 자바 기반
Spring 의 Aop 을 배 울 때 Spring 의 Aop 실현 방식 은 JDK 의 동적 에이전트 와 Cglib 기반 바이트 코드 동적 수정 에이전트 가 있다 는 것 을 알 게 되 었 습 니 다. 다음은 간단 한 사용 을 소개 합 니 다.
Cglib 의 대리 의 주요 원 리 는 동태 적 으로 목표 류 에 하위 클래스 를 생 성 한 다음 에 방법 으로 차단 기술 로 부모 류 방법 에 대한 호출 을 차단 하고 추 세 를 따라 절단면 논 리 를 짜 는 것 이다.
/**
 * @author djh on  2019/4/17 20:00
 * @E-Mail [email protected]
 */
public class CglibProxy implements MethodInterceptor { //       

    private Enhancer enhancer = new Enhancer();

    public Object getProxy(Class targetClass) {
        enhancer.setSuperclass(targetClass);
        enhancer.setCallback(this);  //     
        return enhancer.create();  //            
    }

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("Cglib  ");
        return methodProxy.invokeSuper(o, objects);
    }
}

대상 클래스: (즉, 피 에이전트 클래스)
/**
 * @author djh on  2019/4/18 16:49
 * @E-Mail [email protected]
 */
public class CglibSupper {
    public void method() {
        System.out.println("     ");
    }
}

데모 사용:
/**
 * @author djh on  2019/4/1 19:53
 * @E-Mail [email protected]
 */
public class Demo {

    public static void main(String[] args) {
        CglibProxy cglibProxy = new CglibProxy();
        CglibSupper cglibSupper = (CglibSupper) cglibProxy.getProxy(CglibSupper.class);
        System.out.println(cglibSupper.getClass().getName());  //           
        cglibSupper.method();
    }
}

출력:
demos.cglib.demo.CglibSupper$$EnhancerByCGLIB$$b2ce976a   //        
Cglib  
     

Process finished with exit code 0

좋은 웹페이지 즐겨찾기