Enhancer的简单实践[亲测有效]

Enhancer的简单实践[亲测有效]需求:对指定类的方法做代理。可以使用Proxy+InvocationHandler实现,但是如果代理类没有父接口的情况下,如何快速实现?spring的cglib下提供的Enhancer可以快速实现对某个类的所有实例方法(除final)进行代理。publicstaticvoidmain(String[]args){Enhancerenhancer=newEnhancer();enhancer.setSuperclass(MyHandler

大家好,欢迎来到IT知识分享网。

需求:

对指定类的方法做代理。

可以使用Proxy+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();//没有代理
    }

IT知识分享网

IT知识分享网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";
    }
}

总的来说比较方便就实现了对方法的代理

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/12864.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信