【发布时间】:2023-03-10 22:54:01
【问题描述】:
我是 CDI 的新手,希望有人可以帮助我。
好吧,让我解释一下问题:
我实现了一个由 JSF EL 调用的主 bean。此 bean 处理对象列表。想象一下像List<Car> 这样的东西。
这些汽车对象是在主 bean 的 @PostMethod 方法中构造的。
此外,我还有一些服务类,例如CarServices 提供类似public static List<Car> getCarsOfBrand(Session session, Brand brand) 的内容。
在服务类中,Hibernate 会话用于运行查询并返回应得的列表。
所以,好吧......我想摆脱传递会话对象。所以我的计划是注入它。
我使用public Session getCurrentSession() 方法创建了一个 SessionScoped bean“PersistenceUnit”(可能是该名称已预先分配,对此感到抱歉……)。
我只是想在我的所有服务类中注入这个 bean 来调用类似getCarsOfBrand(Brand brand) 的东西。
问题是,我无法将 CDI bean 注入非 bean。 (汽车目前只是一个 POJO)。
我也尝试通过添加@SessionScoped 将汽车声明为CDI bean 来处理这个问题。
但下一个问题是,Car 对象是由我实例化的,而不是由 Container 实例化的。
我尝试了类似的东西
@Produces
public Car createCar() {
return new Car();
}
但这也不成功:我认为这个带注释的方法返回汽车的代理。但是什么也没发生。 car 内部的注入字段仍然为 null,并且它的 @PostConstruct 方法也从未被调用过。
那你能帮帮我吗?将当前上下文(会话)注入我的服务类的正确方法是什么?
谢谢! :-)
【问题讨论】:
标签: jakarta-ee dependency-injection cdi weld