CglibProxyFactory.java

package sprout.aop;

import net.sf.cglib.proxy.Enhancer;
import sprout.aop.advisor.AdvisorRegistry;
import sprout.beans.InfrastructureBean;
import sprout.beans.annotation.Component;
import sprout.context.CtorMeta;

@Component
public class CglibProxyFactory implements ProxyFactory, InfrastructureBean {
    @Override
    public Object createProxy(Class<?> targetClass, Object target, AdvisorRegistry registry, CtorMeta meta) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(targetClass);
        enhancer.setCallback(new BeanMethodInterceptor(target, registry));
        return enhancer.create(meta.paramTypes(), meta.args());
    }
}