【问题标题】:Injecting dependent bean注入依赖bean
【发布时间】:2014-06-28 03:49:40
【问题描述】:

我有课

EntiyFacadeImpl.java

@Stateless
public class EntityFacadeImpl implements EntityFacade {

    @EJB
    ICustomerBean customerBean;

    public void printCustomer(Customer c) {
        customerBean.printCustomer(c);
        customerBean.additionalFieldsHandler(c.getAdditionalFields().toString());
    }

}

ICustomerBean 是@Local 接口,有两个实现类CustomerBean.javaCustomerBeanExt.java,后者扩展了CustomerBean .java

@Stateless(name = "CustomerBean")
public class CustomerBean implements ICustomerBean {

    public void printCustomer(Customer customer) {
        System.out.println(customer);
    }

    public void additionalFieldsHandler(String additionalFields) {
        // an empty implemetation here
    }
}

@Stateless(name = "CustomerExtBean")
public class CustomerExtBean extends CustomerBean implements ICustomerBean {

    @Override
    public void additionalFieldsHandler(String additionalFields) {
            // some custom implemetation
        System.out.println("Additional Fields: "+additionalFields);
    }
}

ICustomer界面如下所示

@Local
public interface ICustomerBean {
    public void printCustomer(Customer c);
    public void additionalFieldsHandler(String additionalFields);
}

我的目标是,每当我只在 SimpleRESTPojo.java 中注入我的 EntityFacade(EntityFacadeImpl 的接口)时,我希望 CustomerExtBean 被注入在其中,当任何其他类注入它时,我希望 CustomerBean 被注入

@Path("/pojo")
public class SimpleRESTPojo {

    @EJB
    private EntityFacade entityFacade;

}

我的应用程序的入口点仅是 EntityFacade。有没有办法做到这一点?

【问题讨论】:

    标签: java dependency-injection ejb ejb-3.0 cdi


    【解决方案1】:

    实际上,在阅读了您的问题之后,您似乎正在尝试引入紧密耦合。 CDI 不会让EntityFacade 知道它被注入到哪里。我没有办法做到这一点。

    您可以做的是创建一个使用此注入点的EntityFacade 的扩展版本:

    @Inject
    @Extended //or whatever qualifier you come up with
    private ICustomerBean  customerBean;
    

    然后在扩展 EntityFacade 上使用相同的限定符。

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多