我确实理解,调用带@Remove
注释的方法会告诉 EJB 容器,客户端不再需要有状态 EJB 的实例,并且可以在调用后将其删除。
但在 Oracle JEE 教程中,此方法用于“清理”实例。例如,请参见此处:
@Stateful
public class CartBean implements Cart {
// ...
List<String> contents;
// ...
@Remove
public void remove() {
contents = null;
}
}
(来自https://docs.oracle.com/javaee/6/tutorial/doc/bnbod.html)
该成员List<String> contents;
设置为,null
但我认为没有任何理由这样做。当实例被删除时,它不会杀死所有这些引用吗?
我可以想象,当实例被释放时,需要执行一些业务任务,但是在调用方法之后,@Remove
它或多或少会直接调用一些@PreDestroy
方法,然后我可以执行这些任务。那么为什么我们有这种特殊的@Remove
方法和方法而不是像EJBContainer.remove(myBean)
您能否澄清@Remove
注释的目的和/或提供一些易于理解的用例示例,这些示例可以明显看出我们为什么需要这种机制?