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的实例. 希望这使得它更清楚. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- mysql 多表查询
- 简单介绍区分applet和application的方法
- java – JSF 2 – Bean验证:验证失败 – >空值替换为来自托
- Java中对象列表之间的最佳差异
- java – 以时间效率方式将大数组中的所有零值移动到其前部
- java – 此令牌后预期的令牌variabledeclaratorid上的语法错
- SpringMVC自定义属性编辑器详解及实例
- Java的Runtime.getRuntime().exec()会在Windows 7上运行吗?
- java.lang.UnsatisfiedLinkError:java.library.path中没有
- Play 2.0 / Java – 有没有办法在请求数据绑定后完成验证?