如何将CDI bean注入自定义实体类?

时间:2014-10-17 20:08:54

标签: java-ee jboss cdi wildfly

我们使用Cassandra(和DataStax驱动程序)来存储我们的实体。因此,我们有一个自定义实体服务,它在从Cassandra检索数据时创建实体类的新实例。

我还需要使用CDI将服务注入到我的实体类中。我该怎么做呢?当我只是在@Inject注释时,它永远不会被注入。

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;

    }

}

作为参考,我使用的是JBoss / Wildfly 8.1。

1 个答案:

答案 0 :(得分:0)

CassandraEntityService.findCustomer()中的直接问题是Customer实例不是CDI bean,因为findCustomer直接调用构造函数。

使用entities as CDI beans可能会遇到麻烦,但我认为(a)您需要Customer的生产者方法,而(b)CassandraEntityService本身需要另一个bean @InjectCustomer,而不是直接调用构造函数。

但是,对于更一般的问题(在实体更改时触发事件)的更好解决方案可能是Entity Listener,在这种情况下Customer可能不会有任何需要是一个CDI bean。