package org.atomnuke.plugin.proxy.japi; import java.lang.reflect.Proxy; import org.atomnuke.plugin.InstanceContext; import org.atomnuke.plugin.proxy.InstanceEnvProxyFactory; import org.atomnuke.service.Service; /** * * @author zinic */ public class JapiProxyFactory implements InstanceEnvProxyFactory { private static final InstanceEnvProxyFactory STATIC_INSTANCE = new JapiProxyFactory(); public static InstanceEnvProxyFactory getInstance() { return STATIC_INSTANCE; } @Override public <T> T newProxy(Class<T> masqueradeClass, InstanceContext instanceContext) { return (T) Proxy.newProxyInstance( Thread.currentThread().getContextClassLoader(), new Class[]{masqueradeClass}, new InstanceContextInvocationHandler(instanceContext)); } @Override public <T> T newServiceProxy(Class<T> masqueradeClass, InstanceContext<Service> instanceContext) { return (T) Proxy.newProxyInstance( Thread.currentThread().getContextClassLoader(), new Class[]{masqueradeClass}, new ServiceInvocationHandler(instanceContext)); } }