title: Why am I getting "classes must have either one (and only one) constructor" error?
body: <p>I have been trying to get Guice working but end up with this:</p>
  
  <blockquote>
    <p>Classes must have either one (and only one) constructor</p>
  </blockquote>
  
  <p>My interface:</p>
  
  <pre><code>public interface AddrBookStore {
      public Contact getContactByKey(String key);
      public void addContact(Contact c);
  }
  </code></pre>
  
  <p>The implementation:</p>
  
  <pre><code>public class RdbmsBasedAddrBookStore implements AddrBookStore {
      private Connection connection;
  
      public RdbmsBasedAddrBookStore(Connection connection) {
          this.connection = connection;
      }
  
      @Override
      public Contact getContactByKey(String key) throws AddrBookException
      {} 
      @Override
      public void addContact(Contact c) throws AddrBookException
      {}
  }
  </code></pre>
  
  <p>The binding module:</p>
  
  <pre><code>public class ABguiceConfingModule extends AbstractModule {
      @Override
      protected void configure() {        
          bind(AddrBookStore.class).to(RdbmsBasedAddrBookStore.class);
      }
  }
  </code></pre>
  
  <p>The <code>AddrBook</code> client where I am injecting:</p>
  
  <pre><code>public class AddrBook {
      private AddrBookStore store;
  
      @Inject
      public AddrBook(AddrBookStore store)
      {
          this.store = store;
      }
      ... other methods;
  }
  </code></pre>
  
  <p>And my main: </p>
  
  <pre><code>public class App 
  {
      public static void main( String[] args ) throws Exception
      {
          Injector injector = Guice.createInjector(new ABguiceConfingModule() );
          AddrBookStore store = injector.getInstance( AddrBookStore.class );
  
          AddrBook book = new AddrBook(store);
          AddrBookCLI cli = new AddrBookCLI(book);
          cli.interact(new InputStreamReader(System.in), new OutputStreamWriter(System.out));
  
  }}
  </code></pre>
  
  <p>After all this, I'm getting this error: </p>
  
  <pre><code>1) Could not find a suitable constructor in addrbook.store.RdbmsBasedAddrBookStore. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
  [ERROR] at addrbook.store.RdbmsBasedAddrBookStore.class(RdbmsBasedAddrBookStore.java:23)
  [ERROR] at addrbook.ABguiceConfingModule.configure(ABguiceConfingModule.java:13)
  </code></pre>
  
  <p>I have experience with Spring and not with Guice. Where am I going wrong here?</p>