gpt4 book ai didi

jakarta-ee - CDI 在同一实例中调用拦截器注释方法

转载 作者:行者123 更新时间:2023-12-02 02:30:54 24 4
gpt4 key购买 nike

这是我的 DAO 实现,我将加载整个表并在内存中缓存一段时间

@ApplicationScoped
public class DataAccessFacade {

@Inject
private EntityManager em;

@CacheOutput
public Map<String, String> loadAllTranslation() {
List<Translation> list = em.createQuery("select t from Translation t").getResultList();
Map<String, String> result = new HashMap<String, String>();
// do more processing here, omitted for clarity
return result;
}

public String getTranslation(String key) {
return loadAllTranslation().get(key);
}

}

这是我的 Jersey 客户端

@Inject
DataAccessFacade dataAccessFacade;

@Path("/5")
@GET
@Produces(MediaType.TEXT_PLAIN)
public String t5(@QueryParam("id") String key) {
// load the data from dataAccessFacade
String text = dataAccessFacade.getTranslation(key);
String text2 = dataAccessFacade.loadAllTranslation().get(key);
}

如果我在客户端调用 dataAccessFacade.loadAllTranslation(),我会看到拦截器逻辑已被执行

如果我调用内部调用 loadAllTranslation() 的 dataAccessFacade.getTranslation(),那么我没有看到拦截器被执行

这里有什么问题?

如何解决?

最佳答案

这是 CDI 规范中的正确行为。只有“客户端”类调用的方法才被视为“业务方法”,因此会被拦截。

关于jakarta-ee - CDI 在同一实例中调用拦截器注释方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3837118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com