public static Object newInstance(Class clazz) { try { Enhancer e = new Enhancer(); e.setSuperclass(clazz); e.setCallback(callback); return e.create(); } catch (Throwable e) { e.printStackTrace(); throw new Error(e.getMessage()); } }
/** * control 代理工厂 * * @param clazz * @return */ public static <T> T getControlInstance(Class<T> clazz, MessageProxy mMethodCallBack) { Enhancer<T> enhancer; if (mMethodCallBack != null) { enhancer = new Enhancer<T>( mCacheDir, clazz, new Class[] {mMethodCallBack.getClass()}, new Object[] {mMethodCallBack}); } else { enhancer = new Enhancer<T>(mCacheDir, clazz); } enhancer.addCallBacks(new Interceptor[] {new AsyncMethodAtomInterceptor(mMethodCallBack)}); enhancer.addFilter(new AsyncMethodFilter()); return enhancer.create(); }
private Factory createMock() throws Exception { final MethodInterceptor interceptor = new MethodInterceptor() { public Object intercept( final Object obj, final Method method, final Object[] args, final MethodProxy proxy) throws Throwable { return proxy.invokeSuper(obj, args); } }; final Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(ArrayList.class); enhancer.setCallbackType(MethodInterceptor.class); final Class<?> mockClass = enhancer.createClass(); Enhancer.registerCallbacks(mockClass, new Callback[] {interceptor}); final Factory f = (Factory) ClassInstantiatorFactory.getInstantiator().newInstance(mockClass); f.getCallback(0); return f; }