public void invoke(MethodInvocation method) throws Throwable { if (method.isGetter()) { if (properties.containsKey(method.getName())) { method.setResult(properties.get(method.getName())); return; } if (unknown.contains(method.getName())) { return; } Object value; next.invoke(method); if (!method.found()) { unknown.add(method.getName()); return; } value = method.getResult(); properties.put(method.getName(), value); return; } next.invoke(method); }