Jakarta ee 如何将CDIBean注入自定义实体类?
我们使用Cassandra(和DataStax驱动程序)存储实体。因此,我们有一个自定义实体服务,当它从Cassandra检索数据时,它会创建实体类的新实例 我还需要使用CDI将服务注入到我的实体类中。我该怎么做?当我简单地在@Inject注释中输入时,它永远不会被注入Jakarta ee 如何将CDIBean注入自定义实体类?,jakarta-ee,jboss,cdi,wildfly,Jakarta Ee,Jboss,Cdi,Wildfly,我们使用Cassandra(和DataStax驱动程序)存储实体。因此,我们有一个自定义实体服务,当它从Cassandra检索数据时,它会创建实体类的新实例 我还需要使用CDI将服务注入到我的实体类中。我该怎么做?当我简单地在@Inject注释中输入时,它永远不会被注入 public class Customer{ @Inject private Event<DeactivationEvent> events; private String uid;
public class Customer{
@Inject
private Event<DeactivationEvent> events;
private String uid;
public void setUid(String uid){
this.uid = uid;
}
public String getUid(){
return this.uid;
}
public void deactivate(){
events.fire( new DeactivationEvent() );
}
}
public CassandraEntityService{
public static Customer findCustomer(String uid){
...whatever lookup logic...
Customer customer = new Customer();
customer.setUid(..)
customer.set...
return customer;
}
}
公共类客户{
@注入
私人活动;
私有字符串uid;
公共void setUid(字符串uid){
this.uid=uid;
}
公共字符串getUid(){
返回这个.uid;
}
公开作废{
events.fire(新的DeactivationEvent());
}
}
公共CassandraEntityService{
公共静态客户findCustomer(字符串uid){
…无论什么查找逻辑。。。
客户=新客户();
customer.setUid(…)
顾客,集合。。。
退货客户;
}
}
作为参考,我正在使用JBoss/Wildfly 8.1。CassandraEntityService.findCustomer()中的直接问题是,
Customer
实例不是CDIBean,因为findCustomer
直接调用构造函数
使用时可能会遇到问题,但我认为(a)您需要为客户
使用producer方法,以及(b)CassandraEntityService
本身需要是另一个bean,它@Inject
将客户
,而不是直接调用构造函数
然而,对于更一般的问题(当实体发生变化时触发事件)更好的解决方案可能是,在这种情况下,Customer
可能不需要成为CDIBean