代码之家  ›  专栏  ›  技术社区  ›  Anas

Java EE的CDI未按预期工作

  •  1
  • Anas  · 技术社区  · 7 年前

    大家好,我有以下代码试图使用 CDI @produces

    import java.sql.Connection;
    import javax.enterprise.inject.Produces;
    public class ConnectionSupplier
    {
    
        @Produces
        //@RequestScoped
        @Connect
        public Connection getConnection()
        {
            //get connection from datasource
        }
    }
    

    这是 @connect

    //remove imports
    
    @Qualifier
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD, ElementType.FIELD})
    public @interface Connect{}
    

    我们在这里制作 注射

    import com.seta.history.db.entities.Day;
    import java.sql.Connection;
    import javax.enterprise.context.RequestScoped;
    import javax.inject.Inject;
    import javax.inject.Named;
    
    @RequestScoped
    @Named("day")
    public class DayController
    {
    
        @Inject
        @Connect
        private Connection connection;
        public void save(Day day)
        {
            //do-save
        }
    }
    

    但它给出了以下例外

    Severe:   Exception during lifecycle processing 
    org.glassfish.deployment.common.DeploymentException: CDI deployment                 
    failure:WELD-001408: Unsatisfied dependencies for type Connection with     
    qualifiers @Connect
    at injection point [BackedAnnotatedField] @Inject @Connect private 
    com.seta.history.db.controllers.DayController.connection
    at 
    com.seta.history.db.controllers.
         DayController.connection(DayController.java:0)
    

    我正在使用 + 玻璃鱼4.1.2

    注释 我们通常用玻璃鱼和 CDI

    1 回复  |  直到 7 年前
        1
  •  3
  •   Rouliboy    7 年前

    在CDI>1.0,如果你没有豆子。CDI只扫描带注释的类。所以CDI没有考虑您的 ConnectionSupplier 班级和制片人。

    • 注释您的 类(例如 @ApplicationScoped
    • 添加 beans.xml 具有 bean-discovery-mode="all" 告诉CDI扫描所有类。