分享
三行代码  ›  专栏  ›  技术社区  ›  fatherazrael

DeploymentException:WELD-001408:在注入点[backedanotatedfield]处带有限定符@Default的类型<Class>的未满足依赖项

  •  0
  • fatherazrael  · 技术社区  · 4 天前

    在无法找到答案且包含beans.xml的方案中注入bean时出现以下异常:

    Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type CustomerAgreementDaoImpl with qualifiers @Default
      at injection point [BackedAnnotatedField] @Inject public com.evry.integrator.snow.fetch.CustomerAgreementFetcher.customerAgreementDaoImpl
      at com.evry.integrator.snow.fetch.CustomerAgreementFetcher.customerAgreementDaoImpl(CustomerAgreementFetcher.java:0)
    
            at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:378)
            at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:290)
    

    下面是代码结构:

    /WEB-INF中的Beans.xml

    <beans xmlns="http://java.sun.com/xml/ns/javaee" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                               http://java.sun.com/xml/ns/javaee/beans_1_1.xsd"
           version="1.1" bean-discovery-mode="all"> 
    </beans>
    

    接口

    public interface GenericDao<T, PK> {
    
    public interface CustomerAgreementDao extends GenericDao<CustomerAgreement, Long>{
    

    实现泛型DAO的抽象类

    public abstract class GenericDaoImpl<T, PK> implements GenericDao<T, PK> {
    
    @PersistenceContext(unitName = "IntegratorMasterdataDS")
    protected EntityManager em;
    

    主要实施

    @Stateless
    public class CustomerAgreementDaoImpl extends GenericDaoImpl<CustomerAgreement, Long> implements CustomerAgreementDao {
    
    public CustomerAgreementDaoImpl() {
        System.out.println("CustomerAgreementDaoImpl");
    }
    

    服务类中使用的Dao

    @Stateless
    public class CustomerAgreementFetcher {
    
        @Inject
        public CustomerAgreementDaoImpl customerAgreementDaoImpl;
    

    主调度程序正在加载以上所有内容

    @Startup
    @Singleton
    @AccessTimeout(value = 5, unit = TimeUnit.MINUTES)
    public class WPoller {
        @Inject
        CustomerAgreementFetcher customerAgreementFetcher;
    
    1 回复  |  直到 4 天前
        1
  •  1
  •   Petr Aleksandrov    4 天前

    能否将字段的类型更新为CustomerAgreementDao接口?

    @Stateless
    public class CustomerAgreementFetcher {
    
        @Inject
        public CustomerAgreementDao customerAgreementDao;
    

    相关主题: Is it possible to inject EJB implementation and not its interface using CDI?