我有以下两个无状态EJB,你可以看到它们引用了另一个。
@Stateless
public class EjbA {
@Inject
private EjbB b;
}
@Stateless
public class EjbB {
@Inject
private EjbA a;
}
这是一种不好的做法吗?这会导致内存泄漏吗?
修改
如果EJB中的一个是有状态的,那是相同的行为吗?
答案 0 :(得分:0)
不,这不是一个坏习惯。
如果您想要更改transactionnal上下文,这是建议的方法,因为您应该知道在容器中没有捕获调用EJB中的方法,因此不会修改transactionnal属性。
但请注意,如果自身注入EJB X,则会创建一个新实例。
我不知道Statefull EJB会发生什么
答案 1 :(得分:0)
考虑没有任何EJB特定注释的代码:
public class EjbA {
private EjbB b;
}
public class EjbB {
private EjbA a;
}
这里有两个类之间的循环依赖关系。一般来说,在代码中保留这种关系是一种不好的做法。将这两个类标记为EJB,可以为它们提供额外的功能(例如,事务,依赖注入,实例池)。然而,循环关系的问题仍然存在。为了消除进一步的潜在问题,尽量避免这种设计。
答案 2 :(得分:0)