package com.github.ggeorgovassilis.springjsonmapper.utils;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
/**
* Implements proxies with cglib
* @author george georgovassilis
*
*/
public class CglibProxyFactory implements ProxyFactory{
protected Class<?> baseClass;
protected ClassLoader classLoader;
public CglibProxyFactory(ClassLoader classLoader, Class<?> baseClass) {
this.baseClass = baseClass;
this.classLoader = classLoader;
}
@Override
public Object createProxy(final ClassLoader classLoader, final Class<?>[] interfaces,
final InvocationHandler callback) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Object.class);
enhancer.setClassLoader(classLoader);
enhancer.setCallback(new net.sf.cglib.proxy.InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
return callback.invoke(proxy, method, args);
}
});
enhancer.setInterfaces(interfaces);
return enhancer.create();
}
}