How can I create proxy without using spring AOP

aop, java, spring

Solution

An example using a Spring bean post-processor to proxy every bean:

public class ProxifyingPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(final Object bean, String beanName) throws BeansException {

        Class beanClass = bean.getClass();

        if (Proxy.isProxyClass(beanClass)) {
            return bean;
        }

        List<Class<?>> interfaceList = getAllInterfaces(beanClass);
        Class[] interfaces = (interfaceList.toArray(new Class[interfaceList.size()]));

        return Proxy.newProxyInstance(beanClass.getClassLoader(), interfaces, new InvocationHandler() {

            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                return method.invoke(bean, objects);
            }

        });
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    private List<Class<?>> getAllInterfaces(Class<?> cls) {
        if (cls == null) {
            return null;
        }
        LinkedHashSet<Class<?>> interfacesFound = new LinkedHashSet<Class<?>>();
        getAllInterfaces(cls, interfacesFound);
        return new ArrayList<Class<?>>(interfacesFound);
    }

    private void getAllInterfaces(Class<?> cls, HashSet<Class<?>> interfacesFound) {
        while (cls != null) {
            Class<?>[] interfaces = cls.getInterfaces();
            for (Class<?> i : interfaces) {
                if (interfacesFound.add(i)) {
                    getAllInterfaces(i, interfacesFound);
                }
            }
            cls = cls.getSuperclass();
        }
    }
}

Problem

My server doesn't have spring AOP jars and I can't add them. Spring version is 2.0.6. I want to use proxy for 5 of my services. What is the best way to do this

Original source