gpt4 book ai didi

java - 注入(inject)的父类(super class) Bean 如何注入(inject)错误的实例(子类 Bean 实例)?

转载 作者:行者123 更新时间:2023-11-30 06:31:18 25 4
gpt4 key购买 nike

问题:当我在另外两个类(Servlet)中注入(inject)一个带有 2 个子类的 Bean(在过滤器中)时,出现了一些意外的行为。现在,注入(inject)的父类(super class)可以在运行时保存对子类实例的引用(随着每个容器的重新启动而更改)。

我一定犯了一个严重的错误,但我不太清楚到底是什么。

其他信息:

我使用 Java EE6

类结构:

在过滤器中,我将包含随机实例的父类(super class)注入(inject)到子类或父类(super class)之一:

@EJB
private ClientLogger clientLogger;

super 类是这样开始的:

@Stateless
@LocalBean
public class ClientLogger implements HcpEntityBeanLogger<Client> {

private Client client;

public ClientLogger(){
}

....

}

我将这个子类 bean 注入(inject)到我的一个 Servlet 中:

@Stateless
@LocalBean
public class AdminClientLogger extends ClientLogger {

public AdminClientLogger(){
}
...
}

解决方案尝试:

据我了解,最后注入(inject)的子类将是 clientLogger 引用的实例,但是为什么,为什么我不能拥有 3 个不同的实例并在这里使用继承?

编辑:当注入(inject)多个查询 bean 时,我再次遇到这个问题,这些查询 bean 都实现相同的接口(interface),所有这些 bean 都将保存对同一实例的引用。

解决方案是添加 beanName 并用 EJB 注入(inject)接口(interface)

@EJB(beanName="name of your bean class or name specified in @Stateless(name=".."))

最佳答案

您可以使用 @EJB 注释上的查找属性并获取注入(inject)的所需子类。例如。

     @EJB(lookup="java:global/rest/AdminClientLogger")
private ClientLogger clientLogger;

显然,您必须更改上面示例中的 JNDI 查找路径。

关于java - 注入(inject)的父类(super class) Bean 如何注入(inject)错误的实例(子类 Bean 实例)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46049067/

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