@ApplicationScoped - 是否可以进行临时注射?

@ApplicationScoped - is it possible to get temporary injections?

我想设置一个@ApplicationScoped 缓存机制,基本上只是存储它在启动时读取的一些数据库值。是否可以在不一直持有 EntityManager 和其他注入依赖项(即查询工厂)的情况下执行此操作?我只在初始化期间需要它们。

我不确定容器是否真的保持连接打开。但是可以说它会。首先,您需要通过 CDI 注入 EntityManager。您可以这样做:

@ApplicationScoped
public class EntityManagerProducer {
    @Produces
    @PersistenceContext(unitName = "my-pu-name")
    private EntityManager em;
}

然后在你的初始化方法中你可以使用:

public void init() {
  EntityManager entityManager = CDI.current().select(EntityManager.class).get();
  // Do some stuff here
  CDI.current().select(Entitymanager.class).destroy(entityManager);
}

.destroy 应确保依赖项不再 处于活动状态。