gpt4 book ai didi

jakarta-ee - 注入(inject)返回字符串 CDI 的生产者方法

转载 作者:行者123 更新时间:2023-12-02 22:40:19 24 4
gpt4 key购买 nike

我想使用 CDI 将常量字符串消息注入(inject) JSF Web 应用程序中的托管 bean,这里是生产者类:

@Named
@RequestScoped
public class StringProducer {

@Produces
@Named("message")
@RequestScoped
public String getMessage() {
return "Hello World";
}
}

以下是如何将其注入(inject)到另一个托管 bean 中:

@Inject Named("message") String message;

但这总是会导致异常:

org.jboss.weld.exceptions.UnproxyableResolutionException: WELD-001435 Normal scoped bean int is not proxyable

我尝试将 String 类型包装在实例中,如下所示:

@Inject Named("message") Instance<String> message;

但没有任何改变。

最佳答案

问题是您在生产者方法上使用了 @RequestScoped 注释。删除它,应用程序将按预期工作。

Request Scoped注释用于注释容器管理的Bean。为此,容器代理对象的公共(public)方法。然而,像 String 这样的 Final 类是不可代理的,正如在带有 Weld 2.0.0 SP1 的 Glassfish 4.0 上运行代码时出现的异常所指出的那样:

WELD-001437 Normal scoped bean class java.lang.String is not proxyable because the type is final or it contains a final method class java.lang.String - Producer Method [String] (...etc.)

关于jakarta-ee - 注入(inject)返回字符串 CDI 的生产者方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21616284/

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