前言:如果感觉到使用java动态代理,必须要写接口麻烦。想直接使用类的话,就用cglib吧
目标对象:
public class Target {
public String execute() {
String message = "----------test()----------";
System.out.println(message);
return message;
}
}
拦截器:
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class MyMethodInterceptor implements MethodInterceptor {
public Object intercept(Object object, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
System.out.println(">>>MethodInterceptor start...");
Object result = methodProxy.invokeSuper(object,args);
System.out.println(">>>MethodInterceptor ending...");
return "hahahh";
}
}
测试类:
import net.sf.cglib.proxy.Enhancer;
public class TestCglibProxy {
public static void main(String rags[]){
Target target = new Target();
TestCglibProxy test = new TestCglibProxy();
Target proxyTarget = (Target)test.createProxy(Target.class);
String res=proxyTarget.execute();
System.out.println(res);
}
public Object createProxy(Class targetClass){
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(new MyMethodInterceptor());
return enhancer.create();
}
}
运行结果:
C:/classes>java -cp .;C:/classes/cglib-nodep-2.1_3.jar TestCglibProxy
>>>MethodInterceptor start...
----------test()----------
>>>MethodInterceptor ending...
hahahh