Java EE – inject @ EJB beans according to conditions

A novice question: can I inject different beans according to the conditions I set in the properties file This is what I want to achieve:

I set some values in the properties file If it's true, I think

public class MyClass{
    @EJB
    private MyBean bean;
  }

If it's false, then

public class MyClass{
  @EJB
  private MyBean2 bean2;
 }

Is this feasible

Solution

As Gonzalo said, if you want to declare it as a class field and use its different implementation, you first need to specify the public interface of the bean

In addition, I think you can use CDI's @ produces method to achieve more elegance; Between these lines:

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

Then in your code, you can use:

@Inject
MyBean myBean;

And will fill you with appropriate beans according to your conditions

If you don't need class level fields, you can use the old methods and locate EJBs in JNDI – in this way, you can control what types and what beans should be located and used

Edit: I added @ EJB annotated beans to show where 'mybean1' and 'mybean2' instances may come from

This example shows that you can have a single location where you can define all dependencies on different EJB implementations and other components In one example, this can be implemented as a singleton EJB with @ EJB field, @ persistencecontext field, etc

Instead of performing this operation in a rendered manner, you can change return mybean1 to return context Lookup ("jndi_namespace_coordinates"), where context is an instance of initialcontext

I hope this makes it clearer

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>