是否有可能在两个将依次调用的CDI装饰器之间共享数据?

在我的情况下,FirstDecorator调用服务并获取ID。 SecondDecorator需要知道此ID才能调用另一个服务。

最佳答案

没有内置上下文或在Decorator之间共享的类似内容。没有必要。

相反,您可以自己执行此操作。每个Decorator@Inject与您设计的对象相同,可能具有setId()方法。那是:

// In decorator 1:
@Inject
private IdHolder idHolder;

// In some method in decorator 1:
this.idHolder.setId(theIdInQuestion);

// In decorator 2:
@Inject
private IdHolder idHolder;

// In some method in decorator 2:
final Object id = this.idHolder.getId();

// The IdHolder class:
@ApplicationScoped // or some other scope that will "stick around" longer than @Dependent
class IdHolder {
  private Object id;
  Object getId() { return this.id; }
  void setId(final Object id) { this.id = id; }
}

09-07 15:06