Java 为什么我能';t注入一个bean的多个实例?

Java 为什么我能';t注入一个bean的多个实例?,java,jakarta-ee,jpa,dependency-injection,javabeans,Java,Jakarta Ee,Jpa,Dependency Injection,Javabeans,我有两个bean:一个管理单个股票,另一个管理两个股票之间的移动。因此,在MovStock bean中,我有: @EJB private Stock stock1; @EJB private Stock stock2; [...] public void setStocks(int idStock1, int idStock2) { stock1.loadStock(idStock1); stock2.loadStock(idStock2); } 在我的代码中的某个地方,在另一个b

我有两个bean:一个管理单个股票,另一个管理两个股票之间的移动。因此,在MovStock bean中,我有:

@EJB
private Stock stock1;
@EJB
private Stock stock2;

[...]

public void setStocks(int idStock1, int idStock2) {
  stock1.loadStock(idStock1);
  stock2.loadStock(idStock2);
}
在我的代码中的某个地方,在另一个bean上,我执行以下操作:

@EJB
private MovStock movStock;

[...]

movStock.setStocks(10,20);
但这会导致stock1和stock2持有相同的股票(20)。我肯定做错了什么,但是使用@PersistenceContext等的同一bean的多个实例的正确方法是什么


谢谢

bean是容器管理的。因此,您不必担心实例。容器将在需要时创建新的容器,但它将具有相同的状态(如果Statefull)。看起来
Stock
不应该是企业Bean,而是DTO。您不应该在EJB上执行数据操作。EJB应该在适当的结构(DTO)上执行它。

可能是因为注入的实例对于两个
股票
都是相同的,您需要某种限定符来注入两个不同的实例是的,但是什么限定符呢?我被卡住了。嗯,也许我的问题不清楚。Stock是一个bean,它持有管理库存的逻辑(即:add,sub),MovStock是一个bean,它持有管理移动的逻辑(将10从stock1移动到stock2),因此在MovStock中,我需要使用Stock bean(一个移动使用移动实体、一个jpa表和两个Stock,分别用于add和sub数量).为了在实体上执行操作,我们使用Dao(数据访问对象)。Dao可以是EJB。但是为了保存数据,您应该创建DTO。该DTO不是容器管理的,因此可以有多个独立的实例<代码>股票是一个bean,它拥有管理股票的逻辑——没错,但股票不应该包含股票。这应该是不同的对象,而不是EJB。因此,如果我理解的话,我需要两个bean(stock和movstock逻辑)、两个实体(绑定到stock和movstock表)和各种DTO,而在stock bean中我不能使用,例如This.idStock,但我必须管理movstock中的两个DTO并将其传递给stock bean?所以不可能有一只持有逻辑和“流动”股票的股票?很难说,因为我不知道你为什么要持有“流动”股票,但是是的。除非你不想分享“当前”股票。。。但一般来说,“当前”股票dto应该包含在运行时方法(调用股票上的逻辑方法)中,可能是“旧式”的,但我喜欢这样做:
stock s=new stock()s.load(1);s、 增加(5);s、 save()