All Downloads are FREE. Search and download functionalities are using the official Maven repository.

artoria.aop.support.SpringCglibProxyHandler Maven / Gradle / Ivy

The newest version!
package artoria.aop.support;

import artoria.aop.AbstractProxyHandler;
import artoria.aop.Interceptor;
import artoria.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * The proxy factory implements by spring cglib.
 * @author Kahle
 */
public class SpringCglibProxyHandler extends AbstractProxyHandler {
    private static final Logger log = LoggerFactory.getLogger(SpringCglibProxyHandler.class);

    /**
     * The spring cglib method interceptor adapter.
     * @author Kahle
     */
    private static class MethodInterceptorAdapter implements MethodInterceptor {
        private final Interceptor interceptor;

        public MethodInterceptorAdapter(Interceptor interceptor) {
            Assert.notNull(interceptor, "Parameter \"interceptor\" must not null. ");
            this.interceptor = interceptor;
        }

        @Override
        public Object intercept(Object proxyObject, Method method,
                                Object[] args, MethodProxy methodProxy) throws Throwable {

            return interceptor.intercept(proxyObject, method, args);
        }

    }

    @Override
    public Object proxy(Class originalClass, Interceptor interceptor) {
        Assert.notNull(originalClass, "Parameter \"originalClass\" must not null. ");
        Assert.notNull(interceptor, "Parameter \"interceptor\" must not null. ");
        MethodInterceptor methodInterceptor = new MethodInterceptorAdapter(interceptor);
        return Enhancer.create(originalClass, methodInterceptor);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy