当前位置: 首页 > 知识库问答 >
问题:

如果定义类未声明作用域,则CDI生产者方法不起作用

林铭
2023-03-14

我正在本地的Glassfish 4.1中运行一些概念验证。1(焊接2.2.2)关于CDI的安装。

我创建了一个名为TipicalBean的类bean,它注入了在生产者方法中生成的整数。

定义producer方法的类如下所示

public class ProducerTest {

    @Produces @MyNumber @Dependent public static int getMyNumber() {
        return 100;
    }
}

这不工作。即使我声明方法静态

但如果将@Dependent作用域放在类定义中,它确实可以工作,如下所示:

@Dependent
public class ProducerTest {

此外,如果我在注入它的同一个类中声明生产者方法,我可以在生产者方法声明中定义@Dependent作用域,但是WELD会在Glassfish控制台中打印一条警告

WELD-000018: Executing producer field or method [BackedAnnotatedMethod] @Produces
@MyNumber @Dependent public mypackage.TipicalBean.produceMyNumber() on incomplete
declaring bean Managed Bean [class mypackage.TipicalBean] with qualifiers [@Any
@Default] due to circular injection

那是为什么?生产者方法必须在ManagedBeans中定义吗?

因为我使用的是JavaEE7,所以我没有创建bean。xml文件。

谢谢

共有1个答案

左丘智渊
2023-03-14

从CDI规范:

生产者方法必须是托管bean类或会话bean类的默认访问、公共、受保护或私有、非抽象方法。

 类似资料:
  • 我在这里的部分问题是使用正确的词汇,所以我提前为可能是一个简单的术语问题道歉。 假设我有一个接口和一个实现该接口的类。 进一步假设我在某个地方有一个生产者方法(注释为),它返回一个。在内部,它返回一个新的,但这既不是这里也不是那里。 最后,假设我有另一个CDIBean,其注入点定义如下: 假设我有所有的文件就位等,并具有自举焊接或其他符合CDI-1.0的环境,因此我将得到一个不明确的定义错误。这很

  • 假设我有一个配置类(Jms队列配置,见下文)。在此类中,我想为整个应用程序配置多个队列。对于一个队列,没有问题。但是,当我添加第二个队列并尝试从服务(成员服务)中使用其中一个队列时,Spring启动会告诉我 com.example.notification.application.jms.JmsEventPublisher 中的构造函数的参数 1 需要一个 Bean,但找到 2 个: - 队列帐户

  • 问题内容: 我在标准类中校准函数时遇到问题。必须具有所有导入才能使用该功能。我需要延长班级吗? 感谢您的即时帮助。 问题答案: 是Context的方法。因此,您可以将上下文传递给DbAdapter构造函数并从中调用:

  • 问题内容: 我正在使用selenium编写测试。在那些测试中,我需要在表格的字段中输入数字。 这是html: 和代码: 顺便说一句,例如,如果我将字段的类型更改为“文本”,则完全没有问题。此外,还可以很好地工作(但在使用引导程序时却无法正常工作),并且一直都在工作。 selenium版本:2.41.0 Firefox版本:29.0 问题答案: 因为您使用的是Firefox29。请降级到Firefo

  • 问题内容: 我不知道在哪里可以找到hibernate的实现机制。我有很多关于hibernate的问题,但是我们可以从这个问题入手: 如果有这样的HQL: 并查询如下代码: 将所有字段设置为B的默认转换器是什么?我发现这甚至不需要setter或getter来设置值。 或说,它和这个有什么区别: 感谢您阅读本文,欢迎提出任何想法。 问题答案: 当使用默认的Transformer时,它期望类是hiber

  • 问题内容: 当我在node.js中键入时,我得到了。 如果没有关键字,则通过(=> 15)。它可以在Chrome控制台中运行(带有和不带有关键字)。 问题答案: 使用时它在Node中不起作用,因为它是 当前模块 的 本地变量 。您应该直接引用它:。 不输入时,发生的事情现在 是整个Node进程中的全局变量 。 在Chrome浏览器(或其他任何浏览器中-我不确定oldIE …),无论您是否在示例中使