code: @Override
  	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  		try {
  			if(synchronous || method.isAnnotationPresent(Synchronous.class) || !isVoidMethod(method)) {
  				
  				Context context = findContext(args);
  				
  				if(context != null) {
  					synchronized (this) {
                          SocializeService socialize = Socialize.getSocialize();
  
                          if(!socialize.isInitialized(context)) {
  							socialize.init(context);
  							if(!socialize.isAuthenticated() && !method.isAnnotationPresent(NoAuth.class)) {
  								socialize.authenticateSynchronous(context);
  							}
  						}
  					}
  				}
  				
  				return method.invoke(getBean(), args);
  			}
  			else {
  				Activity context = findActivity(args);
  				
  				if(context != null) {
  					SocializeListener listener = findListener(args);
  					
  					// Always init to set the context
  					invokeWithInit(context, listener, method, args);
  				}
  				else {
  					throw new MethodNotSupportedException("No activity found in method arguments for method [" +
  							method.getName() +
  							"]");
  				}
  			}
  			
  			// Always void
  			return null;
  		}
  		catch (Throwable e) {
  			SocializeLogger.e(e.getMessage(), e);
  			throw e;
  		}
  	}
docs: /* (non-Javadoc)
  @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])