记一次cglib的通用动态代理,cglib的代理功能十分强大,通过动态字节码技术,可以单独代理类,不需要实现接口也行,还可以动态生成接口的实现类。
注(cglib的代理会代理父类的方法)
public class CglibCommonProxy {
public <T> Object getProxy(Class<T> target) {
return Enhancer.create(target, new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("cglib-start");
Object res = methodProxy.invokeSuper(o, objects);
System.out.println("cglib-end" + res);
return res;
}
});
}
public static void main(String[] args) {
Object proxy = (HttpRequestImpl)new CglibCommonProxy().getProxy(HttpRequestImpl.class);
System.out.println(proxy);
HttpRequest httpRequest = (HttpRequestImpl) proxy;
httpRequest.test();
}
}