加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:31:31 所属栏目:Java 来源:网络整理
导读:一个新手问题:是否有可以根据我在属性文件中设置的条件注入不同的bean.这是我想要实现的: 我在属性文件中设置了一些值.如果是真的,那我想 public class MyClass{ @EJB private MyBean bean; } 如果是假的,那么 public class MyClass{ @EJB private MyBean2
一个新手问题:是否有可以根据我在属性文件中设置的条件注入不同的bean.这是我想要实现的:

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

public class MyClass{
    @EJB
    private MyBean bean;
  }

如果是假的,那么

public class MyClass{
  @EJB
  private MyBean2 bean2;
 }

这是可行吗

解决方法

如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;
        }
    }
}

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

@Inject
MyBean myBean;

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

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

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

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

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

希望这使得它更清楚.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读