@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
应确保依赖项不再 处于活动状态。
我想设置一个@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
应确保依赖项不再 处于活动状态。