cglib代理指定只代理某个方法
import net.sf.cglib.proxy.*;
import java.lang.reflect.Method;
class SampleClass{
public void test(){
System.out.println("test");
}
public void test2(){
System.out.println("test2");
}
}
public class test {
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(SampleClass.class);
CallbackHelper callbackHelper = new CallbackHelper(SampleClass.class, new Class[0]) {
@Override
protected Object getCallback(Method method) {
// 只代理方法名是test的方法
if(method.getName().equals("test")){
return new MethodInterceptor(){
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.print("代理---");
return methodProxy.invokeSuper(o, objects);
}
};
}else{
return NoOp.INSTANCE;
}
}
};
enhancer.setCallbackFilter(callbackHelper);
enhancer.setCallbacks(callbackHelper.getCallbacks());
SampleClass proxy = (SampleClass) enhancer.create();
proxy.test();
proxy.test2();
}
}
输出:
代理---test
test2