java-ee – 根据条件注入@EJB bean

前端之家收集整理的这篇文章主要介绍了java-ee – 根据条件注入@EJB bean前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一个新手问题:是否有可以根据我在属性文件中设置的条件注入不同的bean.这是我想要实现的:

我在属性文件中设置了一些值.如果是真的,那我想

public class MyClass{
    @EJB
    private MyBean bean;
  }@H_502_5@ 
 

如果是假的,那么

public class MyClass{
  @EJB
  private MyBean2 bean2;
 }@H_502_5@ 
 

这是可行吗

解决方法

如Gonzalo所说,如果要将其声明为类字段并使用其不同的实现,首先需要指定bean的公共接口.

此外,我认为您可以使用CDI的@Produces方法来实现更优雅;即在这些线之间:

@Singleton
@Startup
public class Configuration {

    private boolean someCondition;

    @PostConstruct
    private void init() {
        someCondition = ... // get a value from DB,JMS,XML,etc.
    } 

    @EJB(lookup="java:comp/env/myParticularBean")
    MyBean myBean1;

    @EJB(beanName="anotherTypeOfBeanInjectedByName")
    MyBean myBean2;

    @Produces
    public MyBean produceMyBean() {
        if (someCondition)
            return myBean1;
        } else {
            return myBean2;
        }
    }
}@H_502_5@ 
 

然后在你的代码中,你可以使用:

@Inject
MyBean myBean;@H_502_5@ 
 

并且将根据您的条件为您注入适当的豆.

如果您不需要类级别的字段,您可以使用旧方法,并在JNDI中定位EJB – 以这种方式,您可以控制什么类型和什么bean应该位于和使用.

编辑:我添加了@EJB注释的bean来显示’myBean1’和’myBean2’实例可能来自哪里.

此示例显示,您可以有一个单一的位置,您可以在不同的EJB实现和其他组件上定义所有依赖关系.在一个例子中,这可以被实现为具有@EJB字段,@PersistenceContext字段等的单例EJB.

而不是以呈现的方式执行此操作,您可以将return myBean1更改为return context.lookup(“JNDI_NAMESPACE_COORDINATES”),其中context是InitialContext的实例.

希望这使得它更清楚.

猜你在找的Java相关文章