@Override
	public Object execute(Object obj, Object[] args) {
		// 如果没有配置Cache操作，则直接执行数据访问操作
		if (!cacheDefinitionCollection.needCacheOperation()) {
			return dataAccessExecutor.execute(obj, args);
		}

		boolean dataAccessed = false;
		Object retVal = null;

		try {
			CacheResult cacheResult = beforeDataAccess(args);
			// 如果缓存命中
			if (cacheResult.isHit()) {
				return cacheResult.getRetVal();
			}

			retVal = dataAccessExecutor.execute(obj, args);
			dataAccessed = true;
			cacheResult.setRetVal(retVal);

			afterDataAccess(cacheResult, args);

			return retVal;
		} catch (CacheUnreachableException e) {
			if (!dataAccessed) {
				return dataAccessExecutor.execute(obj, args);
			} else {
				return retVal;
			}

		}

	}