事实证明,做我想做的最简单的方法是使用标签。由于我只能访问程序关闭零件时的代码,因此我需要在零件上设置标签。
if (part.isDirty()) {
if(!partService.savePart(part, true)) {
return;
}
part.getTags().add(Tag.PART_CLOSED_BY_PROGRAM);
partService.hidePart(part);
} else if (part.isCloseable()) {
part.getTags().add(Tag.PART_CLOSED_BY_PROGRAM);
partService.hidePart(part);
}
}
现在我可以检查 preDestroy() 方法是否正在由程序或用户关闭部件。
@PreDestroy
protected void preDestroy() {
if (part.getTags().contains(Tag.PART_CLOSED_BY_PROGRAM)) {
part.getTags().remove(Tag.PART_CLOSED_BY_PROGRAM);
} else {
try {
//remove "Part" from cache
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
} catch (NoSuchMethodException e) {
}
}
}