gpt4 book ai didi

Java EE 的 CDI 没有按预期工作

转载 作者:行者123 更新时间:2023-11-29 04:24:22 24 4
gpt4 key购买 nike

大家好,我有以下代码尝试使用 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{}

在这里我们进行注入(inject)

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)

我正在使用 Java EE 7 + GlassFish 4.1.2

注意 我们通常使用 Glassfish 和 CDI 并且效果很好

所以任何人都可以帮助并在此先感谢

最佳答案

在 CDI > 1.0 中,如果您没有任何 beans.xml,CDI 仅扫描带注释的类。所以 CDI 不会考虑您的 ConnectionSupplier 类和生产者。

你有两种方法来纠正这个:

  • 注释您的 ConnectionSupplier 类(例如使用 @ApplicationScoped)
  • 添加一个带有 bean-discovery-mode="all"beans.xml 以告诉 CDI 扫描所有类。

关于Java EE 的 CDI 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47165355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com