consumer配置：
    <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService">
        <dubbo:method name="sayHello" timeout="60000" **cache="threadlocal"**/>
    </dubbo:reference>

在执行的过程中，我们发现其实并不会创建ThreadlocalCache，而是用的LruCache，原因是在
![image](https://user-images.githubusercontent.com/14085645/36060257-e63276f2-0e80-11e8-9da7-36e41c7ef23a.png)
可以看到，当将cache配置在方法上而不是服务上的时候，传入的url只有"method.cache"参数而没有"cache"参数，但是CacheFactory$Adaptive这个类并没有作区分。
import com.alibaba.dubbo.rpc.RpcResult;
/**
 * CacheFilter
 */
@Activate(group = {Constants.CONSUMER, Constants.PROVIDER}, value = Constants.CACHE_KEY)
public class CacheFilter implements Filter {
    private CacheFactory cacheFactory;
    public void setCacheFactory(CacheFactory cacheFactory) {
        this.cacheFactory = cacheFactory;
    }
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        if (cacheFactory != null && ConfigUtils.isNotEmpty(invoker.getUrl().getMethodParameter(invocation.getMethodName(), Constants.CACHE_KEY))) {
            Cache cache = cacheFactory.getCache(invoker.getUrl().addParameter(Constants.METHOD_KEY, invocation.getMethodName()));
            if (cache != null) {
                String key = StringUtils.toArgumentString(invocation.getArguments());
                Object value = cache.get(key);
                if (value != null) {
                    return new RpcResult(value);
                }
                Result result = invoker.invoke(invocation);
                if (!result.hasException()) {
                    cache.put(key, result.getValue());
                }
                return result;
            }
        }
        return invoker.invoke(invocation);
    }
}