62,614
社区成员
发帖
与我相关
我的任务
分享
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Callback;
import net.sf.cglib.proxy.CallbackFilter;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import net.sf.cglib.proxy.NoOp;
public class CglibTest {
public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Enhancer e = new Enhancer();
e.setSuperclass(S.class);
e.setCallbacks(new Callback[] { new MethodInterceptor() {
@Override
public Object intercept(Object o, Method m, Object[] args,
MethodProxy mp) throws Throwable {
return mp.invokeSuper(o, args);
}
}, NoOp.INSTANCE });
e.setCallbackFilter(new CallbackFilter() {
@Override
public int accept(Method m) {
return m.getName().equals("f") ? 0 : 1;
}
});
S s = (S) e.create();
Method m = S.class.getDeclaredMethod("f");
m.setAccessible(true);
m.invoke(s);
}
}
abstract class S {
private void f() {
System.out.println("Hello");
}
}
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Callback;
import net.sf.cglib.proxy.CallbackFilter;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import net.sf.cglib.proxy.NoOp;
public class CglibTest {
public static void main(String[] args) {
Enhancer e = new Enhancer();
e.setSuperclass(S.class);
e.setCallbacks(new Callback[] { new MethodInterceptor() {
@Override
public Object intercept(Object o, Method m, Object[] args,
MethodProxy mp) throws Throwable {
return mp.invokeSuper(o, args);
}
}, NoOp.INSTANCE });
e.setCallbackFilter(new CallbackFilter() {
@Override
public int accept(Method m) {
return m.getName().equals("f") ? 0 : 1;
}
});
S s = (S) e.create();
s.f();
}
}
abstract class S {
void f() {
System.out.println("Hello");
}
}