我在 OpenJDK 21.0.1+12-29 上为我的应用程序使用 Open Liberty 23.0.0.12。将 server.xml 升级为使用 Jakarta EE Web Profile 10.0 而不是 9.1 后,
ClientHeadersFactory
中的注入不再起作用。在以下示例代码中,myBean 始终为 null
。
public class MyFactory implements ClientHeadersFactory {
@Inject
private MyBean myBean;
@Override
public MultivaluedMap<String, String> update(MultivaluedMap<String, String> incomingHeaders, MultivaluedMap<String, String> clientOutgoingHeaders) {
}
}
MyBean 类
@RequestScoped
public class MyBean {
}
相关的maven依赖是jakarta.platform:jakarta.jakartaee-api:10.0.0。
我已经将其确定为与 Jakarta EE 10 本身升级相关的内容。 我升级了
beans.xml
和 web.xml
文件以反映版本更改。
注入接口而不是具体类 MyBean 也不起作用。
也许我错过了一些强制性的配置更改。但目前我没有主意。
我能想到的唯一相关更改是,在 EE 10 中,如果您有 empty beans.xml,则会发生行为更改。在 EE 9 (CDI 3.0) 中,空 beans.xml 相当于
bean-discovery-mode=all
,而在 EE 10 (CDI 4.0) 中,它相当于 bean-discovery-mode=annotated
。
基于您没有收到错误但
myBean
是null
这一事实,我怀疑MyFactory
没有被拾取为CDI bean,因此没有发生注入。
你可以检查一下吗:
MyFactory
的存档中,是否有beans.xml?如果有的话,是空白的吗?如果不是,它为 bean-discovery-mode
设置什么值?@Dependent
(或另一个定义注释的 Bean,如 @ApplicationScoped
)来 MyFactory
是否可以解决问题?