@Test
  public void interception() {
    // TODO: why do we need storage in this test?  Maybe simpler Iterable<Bean> as adapter?
    Injector injector = Guice.createInjector(new M(), new FinderModule());
    Storage storage = injector.getInstance(Storage.class);
    Class<MvelExpressionTest.Bean> t = MvelExpressionTest.Bean.class;
    storage.register(t);
    storage
        .begin()
        .add(new Update("BEAN-1", "name", "bob"))
        .add(new Update("BEAN-1", "value", "27"))
        .add(new Update("BEAN-2", "name", "lou"))
        .add(new Update("BEAN-2", "value", "23"))
        .commit();

    MyFinder a = injector.getInstance(MyFinder.class);
    List<MvelExpressionTest.Bean> r = Lists.newArrayList(a.foo("27"));
    assertThat(Iterables.getOnlyElement(r).name(), equalTo("bob"));
    assertThat(Iterables.getOnlyElement(r).value(), equalTo("27"));
  }
 @Test
 public void basics() {
   Injector injector = Guice.createInjector(new M(), new FinderModule());
   MyFinder a = injector.getInstance(MyFinder.class);
   MyFinder a1 = injector.getInstance(MyFinder.class);
   Assert.assertSame(a, a1);
   MyFinder b = Guice.createInjector(new M(), new FinderModule()).getInstance(MyFinder.class);
   Assert.assertNotEquals(a, b);
   Assert.assertNotEquals(a.hashCode(), b.hashCode());
   Assert.assertEquals(a, a);
   Assert.assertEquals(a.hashCode(), a.hashCode());
   Assert.assertTrue(a.toString().startsWith("DynamicFinder@"));
 }