code: @Override
  	public Object intercept(Object proxy, Method method, Object[] args, MethodProxy arg3) throws Throwable {
  		if (id == null) {
  			throw new NullPointerException();
  		}
  		try {
  			if (loadedTarget==null) {
  				loadedTarget = daoSupport.findById(id, targetedLoad);
  			}
  
  			return method.invoke(loadedTarget, args);
  		} catch (Throwable thr) {
  			thr.printStackTrace();
  			if (InvocationTargetException.class.isInstance(thr))
  				thr = ((InvocationTargetException) thr).getTargetException();
  
  			if (RuntimeException.class.isInstance(thr))
  				throw thr;
  
  			if (Error.class.isInstance(thr))
  				throw thr;
  
  			Class<?>[] declaredExceptions = method.getExceptionTypes();
  
  			for (int i = 0; i < declaredExceptions.length; i++) {
  				if (declaredExceptions[i].isInstance(thr))
  					throw thr;
  			}
  			throw new UndeclaredThrowableException(thr);
  		}
  	}
docs: {@inheritDoc}