title: Unsatisfied dependencies for type "Interface" with qualifiers @Default at injection point [BackedAnnotatedField] @Inject "Implementation"
body: <p>I want to use in maven project an implementation of CDI+JSF+HIBERNATE+PRIMEFACES.
  my pom.xml is like this:</p>
  
  <pre><code>    &lt;dependencies&gt;
      &lt;!-- PROJECT LOMBOK --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;
          &lt;artifactId&gt;lombok&lt;/artifactId&gt;
          &lt;version&gt;1.16.6&lt;/version&gt;
          &lt;scope&gt;provided&lt;/scope&gt;
      &lt;/dependency&gt;
      &lt;!-- MYSQL --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;mysql&lt;/groupId&gt;
          &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;
          &lt;version&gt;5.1.9&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;!-- HIBERNATE --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.hibernate&lt;/groupId&gt;
          &lt;artifactId&gt;hibernate-core&lt;/artifactId&gt;
          &lt;version&gt;3.6.3.Final&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;!-- CDI --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;javax.enterprise&lt;/groupId&gt;
          &lt;artifactId&gt;cdi-api&lt;/artifactId&gt;
          &lt;version&gt;1.2&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;!-- SLF4j --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.slf4j&lt;/groupId&gt;
          &lt;artifactId&gt;slf4j-simple&lt;/artifactId&gt;
          &lt;version&gt;1.7.12&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;!-- PRIMEFACES --&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.primefaces&lt;/groupId&gt;
          &lt;artifactId&gt;primefaces&lt;/artifactId&gt;
          &lt;version&gt;5.2&lt;/version&gt;
      &lt;/dependency&gt;
  &lt;/dependencies&gt;
  </code></pre>
  
  <p>The structure of my project is like this, I use a generic interface when I implement in different Class.
  One interface that I implement in 3 classes 
  IGenericDAO I implement it in UserDao + PersonDao + RoleDao like this</p>
  
  <pre><code>public interface IGenericDAO&lt;T&gt; {
  
  void save(T object);
  
  void update(T object);
  
  T getObjectById(int id);
  
  List&lt;T&gt; getAll();  }
  </code></pre>
  
  <p>the implementation is</p>
  
  <pre><code>public class UserDAOImpl implements IGenericDAO&lt;User&gt; {
  
  @Override
  public void save(User user) {
      Session session = HibernateUtil.getSessionFactory().openSession();
      Transaction transaction = null;
      try {
          transaction = session.beginTransaction();
          session.save(user);
          transaction.commit();
      } catch (Exception e) {
          if (transaction != null)
              transaction.rollback();
          throw e;
      } finally {
          session.close();
          HibernateUtil.getSessionFactory().close();
      }
  }
  
  @Override
  public void update(User user) {
      Session session = HibernateUtil.getSessionFactory().openSession();
      Transaction transaction = null;
      try {
          transaction = session.beginTransaction();
          session.update(user);
          transaction.commit();
      } catch (Exception e) {
          if (transaction != null)
              transaction.rollback();
          throw e;
      } finally {
          session.close();
          HibernateUtil.getSessionFactory().close();
      }
  }
  
  @Override
  public User getObjectById(int id) {
      Session session = HibernateUtil.getSessionFactory().openSession();
      try {
          return (User) session.createCriteria(User.class).add(Restrictions.eq("id", id)).list().get(0);
      } catch (Exception e) {
          throw e;
      } finally {
          session.close();
          HibernateUtil.getSessionFactory().close();
      }
  }
  
  @SuppressWarnings("unchecked")
  @Override
  public List&lt;User&gt; getAll() {
      Session session = HibernateUtil.getSessionFactory().openSession();
      try {
          return session.createCriteria(User.class).list();
      } catch (Exception e) {
          throw e;
      } finally {
          session.close();
          HibernateUtil.getSessionFactory().close();
      }
  }}
  </code></pre>
  
  <p>like this I code the Service to, I use a Generic Interface and I implement the code in 3 classes separetaded like this:</p>
  
  <pre><code>public interface IGenericService&lt;T&gt; {
  
  void save(T object);
  
  void update(T object);
  
  T getObjectById(int id);
  
  List&lt;T&gt; getAll(); }
  </code></pre>
  
  <p>the implementation</p>
  
  <pre><code>@RequestScoped
  public class UserServiceImpl implements IGenericService&lt;User&gt; {
  @Setter
  @Inject
  private IGenericDAO&lt;User&gt; dao;
  
  @Override
  public void save(User user) {
      dao.save(user);
  }
  
  @Override
  public void update(User user) {
      dao.update(user);
  }
  
  @Override
  public User getObjectById(int id) {
      return dao.getObjectById(id);
  }
  
  @Override
  public List&lt;User&gt; getAll() {
      return dao.getAll();
  }}
  </code></pre>
  
  <p>And finally, the ManagedBean is like this:</p>
  
  <pre><code>@Named(value = "authentication")
  </code></pre>
  
  <p>@RequestScoped
  public class AuthenticationBean implements Serializable {</p>
  
  <pre><code>private static final long serialVersionUID = 2288439665206779666L;
  
  @Getter
  @Setter
  private String message;
  
  @Setter
  @Inject
  private IGenericService&lt;User&gt; userService;
  
  @PostConstruct
  public void init() {
      message = userService.getObjectById(1).getLastname();
  }}
  </code></pre>
  
  <p>Everytime I run the glassfish server i have this error :
   Exception 0 :
  org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type IGenericDAO with qualifiers @Default
    at injection point [BackedAnnotatedField] @Inject private ma.salaried.service.impl.PaymentServiceImpl.dao</p>