Enhancer 의 간단 한 실천

1768 단어 Java자바
필요:
지정 한 종류의 방법 을 대리 하 다.
프 록 시 + InvocationHandler 를 사용 하여 구현 할 수 있 습 니 다. 그러나 프 록 시 클래스 가 부모 인터페이스 가 없 는 경우 어떻게 빠르게 실현 합 니까?
spring 의 cglib 에서 제공 하 는 Enhancer 는 특정한 종류의 모든 인 스 턴 스 방법 (final 제외) 을 빠르게 실현 할 수 있 습 니 다.
public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(MyHandler.class);
        enhancer.setCallback(new MethodInterceptor() {
            @Override
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {

                System.out.println("before");
                System.out.println(">>>>>>>" + method.getName());
                //       invokeSuper
                Object invoke = methodProxy.invokeSuper(o, objects);
                System.out.println("after");
                return invoke;
            }
        });

        MyHandler handler = (MyHandler) enhancer.create();
        handler.method();
        handler.finalMethod();//    
        handler.protectMethod();
        MyHandler.staticMethod();//    
    }
public class MyHandler {

    public String method(){
        System.out.println("hello Enhancer");
        return "2";
    }

    public final String finalMethod(){
        System.out.println("hello finalMethod");
        return "3";
    }

    public static String staticMethod(){
        System.out.println("hello staticMethod");
        return "4";
    }


    protected String protectMethod(){
        System.out.println("hello protectMethod");
        return "5";
    }
}

전반적 으로 비교적 편리 하여 방법 에 대한 대 리 를 실현 하 였 다.

좋은 웹페이지 즐겨찾기