大家好,欢迎来到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