无法解析类型为 xxx 的任何 bean;限定符:[@javax.enterprise.inject.Any()]

2024-05-20

我有一个 LoginProvider 接口:

public interface LoginProvider {
    boolean login(String username, String password);
}

以及两种不同的实现:

public class LoginProvider1Impl implements LoginProvider {
    @Override
    public boolean login(String username, String password) {
        ...
    }
}

public class LoginProvider2Impl implements LoginProvider {
    @Override
    public boolean login(String username, String password) {
        ...
    }
}

然后是生产者注释:

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({FIELD, METHOD, PARAMETER, TYPE, CONSTRUCTOR})
    public @interface LoginProviderProducer {
}

用于指定登录提供程序实现的注释:

@Retention(RetentionPolicy.RUNTIME)
@Target({FIELD, METHOD, TYPE})
public @interface LoginProviderType {
    LoginProviderName value();

    public enum LoginProviderName {

        PROVIDER1(LoginProvider1Impl.class),
        PROVIDER2(LoginProvider2Impl.class);

        private Class<? extends LoginProvider> loginProviderType;

        private LoginProviderName(Class<? extends LoginProvider> loginProviderType) {
            this.loginProviderType = loginProviderType;
        }

        public Class<? extends LoginProvider> getLoginProviderType() {
            return loginProviderType;
        }
    }
}

还有一家工厂:

@ApplicationScoped
public class LoginProviderFactory {

    @Produces
    @LoginProviderProducer
    public LoginProvider createLoginProvider(@Any Instance<LoginProvider> instance, InjectionPoint injectionPoint) {
        Annotated annotated = injectionPoint.getAnnotated();
        LoginProviderType loginProviderTypeAnnotation = annotated.getAnnotation(LoginProviderType.class);
        Class<? extends LoginProvider> loginProviderType = loginProviderTypeAnnotation.value().getLoginProviderType();
        return instance.select(loginProviderType).get();
    }
}

最后,我有一个帮助程序,其中注入了登录提供程序:

@ApplicationScoped
public class LoginProviderHelperImpl implements LoginProviderHelper {

    @Inject
    @LoginProviderProducer
    @LoginProviderType(LoginProviderName.PROVIDER1)
    private LoginProvider provider1;

    @Inject
    @LoginProviderProducer
    @LoginProviderType(LoginProviderName.PROVIDER2)
    private LoginProvider provider2;

    ...
}

使用助手时出现此错误:

org.jboss.weld.exceptions.UnsatisfiedResolutionException:
WELD-001308: Unable to resolve any beans for Type:
class com.xxx.LoginProvider1Impl; Qualifiers: [@javax.enterprise.inject.Any()]

Thanks!


我添加了注释@ApplicationScoped到 LoginProvider1Impl 和 LoginProvider2Impl。
另一种使其工作的方法是修改工厂方法:

@ApplicationScoped
public class LoginProviderFactory {

    @Produces
    @LoginProviderProducer
    public LoginProvider createLoginProvider(@Any Instance<LoginProvider> instance, InjectionPoint injectionPoint) {
        Annotated annotated = injectionPoint.getAnnotated();
        LoginProviderType loginProviderTypeAnnotation = annotated.getAnnotation(LoginProviderType.class);
        Class<? extends LoginProvider> loginProviderType = loginProviderTypeAnnotation.value().getLoginProviderType();
        //return instance.select(loginProviderType).get();
        if (loginProviderType == LoginProvider1Impl.class) {
            return new LoginProvider1Impl();
        } else if (loginProviderType == LoginProvider2Impl.class) {
            return new LoginProvider2Impl();
        } else
            return null;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法解析类型为 xxx 的任何 bean;限定符:[@javax.enterprise.inject.Any()] 的相关文章

  • 初级 Java 计数器代码

    我的教授希望我这样做 使用下面的 Counter 接口写入多个可互换计数器 public interface Counter Current value of this counter int value Increment this co
  • 如果基于 Spring 注解的控制器位于 jar 文件内,则该控制器无法工作

    我的子模块中有一些基于注释的控制器 这些模块作为 jar 文件部署 jar 文件中基于注释的控制器未加载到 spring 配置中 我使用 Eclipse 中的导出实用程序手动导出 jar 文件 有人遇到过这个问题吗 当您使用 Eclipse
  • Java Spring 应用程序存在内存泄漏。系统非堆内存不断增加

    我已使用 yourkit 分析器监视我的 Web 应用程序 保留最大大小的主要对象是 SessionFactoryImpl webappclassloader 和 CGlib 对象显示 spring crone调度程序会导致内存泄漏吗 我尝
  • 要打乱的键值(整数、字符串)列表的最佳结构

    我需要在 Java 中实现一个结构 它是一个键值列表 类型为整数 字符串 并且我想对其进行洗牌 基本上 我想做类似的事情 public LinkedHashMap
  • 哈希码是否用于加速集合中的对象查找?

    IIUC 相同类型的两个不同对象可以存储在 HashSet 中 即使两个对象在以下情况下返回相同的值 hashCode 叫做 例如根据本文 https eclipsesource com blogs 2012 09 04 the 3 thi
  • 正确使用 JDBC 连接池 (Glassfish)

    我需要在 Java Web 服务中作为会话 bean 实现数据库连接 但我不确定我这样做是否正确 我创建了一个类 public final class SQLUtils private static DataSource m ds null
  • 尝试在java中的Arraylist中查找对象的所有出现

    我有一个 Java ArrayList 我需要查找其中出现的所有特定对象 ArrayList indexOf Object 方法只找到一次出现 所以看来我还需要其他东西 我认为你不需要太花哨 以下应该可以正常工作 static
  • 打印 jasper 文件时执行报表 SQL 语句时出错

    我修改了一个旧项目 但无法确定这段代码有什么问题 使用下面的 jrxml它创造 jasper文件 当我打印 jasper 文件时 使用此代码JasperPrint jasperPrint JasperFillManager fillRepo
  • Java元数据读写

    是否可以以通用方式 对于所有图像类型 在 Java 中读取和写入元数据 我找到了一些示例 但它们总是特定的 例如 JPEG 或 PNG 我需要一些足够通用的东西 而不是到处都有 if else 语句 我不想重写源代码 但这是一个很好的例子
  • SimpleDateFormat 将 lenient 设置为 false 时出现异常

    为什么这段代码会抛出无法解析日期的异常 SimpleDateFormat f new SimpleDateFormat yyyy MM dd T HH mm ss 000Z f setLenient false String dateStr
  • 在Java中多次读取System.in会导致IOException?

    我正在尝试创建一个小命令行游戏来强化我在过去几个月中在 Java 中学到的一些东西 我正在尝试创建一个名为 readInput 的方法 它返回一个我可以一次又一次调用的字符串 第一次它工作正常 但第二次它会导致 IO Exception 如
  • 在服务器内部调用 Web 服务

    我有一个网络服务 getEmployee 当传递 id 时 它会获取单个员工的员工详细信息 同一服务器上的另一个 Web 服务 getEmployeeList 当传递一个部门时 它会获取整个员工列表 这将获取部门的 ID 然后调用 getE
  • 如果抛出RuntimeException,是否可以将其作为异常捕获?

    如果我有一个try抛出一个块RuntimException子类 可以是后续的catch块将其捕获为Exception 具体来说 public class MyAppException extends RuntimeException In
  • H2 用户定义的聚合函数 ListAgg 不能在第一个参数上使用 DISTINCT 或 TRIM()

    所以我有一个 DB2 生产数据库 我需要在其中使用可用的函数 ListAgg 我希望使用 H2 的单元测试能够正确测试此功能 不幸的是H2不直接支持ListAgg 但是 我可以创建一个用户定义的聚合函数 import java sql Co
  • Integer.parseInt 引发的 NumberFormatException

    嘿 我在学校上编码课 但老师没有很好地解释 所以我们必须在网上查找我所做的信息 但我无法找到代码中的错误 你能帮我吗 char end s do System out println Tipo de boleto char boleto c
  • 我找不到 IntelliJ 快捷方式

    我使用 vim 一段时间 我知道有一个 intellij vim 插件 我很好奇内置的 IntelliJ 文本导航存在什么 如何打开实时模板来创建模板 如何查看以 tr 开头的现有模板列表 如何进行全局搜索并在当前文档中进行搜索 然后转到下
  • Netbeans 未安装在 MacOS Big Sur 上

    我已在 MacBook Air 上安装了 Big Sur Java 已安装 但 Netbeans 安装显示未找到 Java JDK 有人有这个问题的解决方案吗 我通过安装 JDK15 和 Apache Netbeans 12 2 仅限 12
  • 如何确定 Android 设备上的互联网连接当前是否可用且处于活动状态?

    我有这个 Android 应用程序 需要通过互联网从远程服务器加载数据 这种更新功能显然要求设备不仅连接到某种网络 而且还连接到互联网 所以 想要将更新服务安排在某个日期 当它启动时 它应该确定它是否确实可以到达目标服务器 因此 一个简单的
  • 使用 Graphics2D 在 BufferedImage 上覆盖文本并返回 BufferedImage

    我检查了类似名称的问题 但它们没有回答这个用例 基本上 我是在给定坐标 x y 上覆盖一些文本 文本 我在包中有以下函数 protected BufferedImage Process2 BufferedImage image Graphi
  • 从 WildFly 安全地调用 EJB

    我正在尝试以企业 业务 方式重写我的旧应用程序 因此 我有一个带有登录模块的 Swing 客户端和从头开始创建的我自己的服务器 客户端使用ssl证书加密与服务器的TCP连接 我检查服务器上的客户端证书和客户端上的服务器证书 然后服务器使用数

随机推荐