how to instantiate more than one CDI/Weld bean for one class?

后端 未结 3 421
小蘑菇
小蘑菇 2021-01-13 00:38

In Spring it was possible to instantiate any class by defining the corresponding bean in xml conf. It was also possible to instantiate more then one bean for the same class

相关标签:
3条回答
  • 2021-01-13 01:10

    Two options as far as I can see:

    • Without further knowledge of your usecase, I assume that you either want to provide some alternative implementation for (mock-) testing or configuration issues (say another PaymentProvider for a OrderService). This is supported by the spec itself, have a look at @Alternative here (and don't repeat my initial mistake and forget to activate alternatives in beans.xml)

    • To get a Spring-style XML-configuration, you can use Seam 3 Config, which provides XML-configuration just as described. BTW, this has been a part of JSR 299, but has been removed from the spec for whatever reason.

    0 讨论(0)
  • 2021-01-13 01:18

    You can easily use producer methods and if you have multiple instances that should be produced by a method use CDI qualifiers to distinguish different types of instances.

    Also you can use Seam Config to do it Spring way but i think producer methods are more elegant way of doing this. depending on your use case there is another option which is @Alternative .

    0 讨论(0)
  • 2021-01-13 01:20

    there are a few ways to do that.

    E.g. use @New

    private @Inject @New YourBean yb; private @Inject @New YourBean yb2;

    This forces the container to create a new instance, regardless what Scope the bean originally had.

    Another way would be to simply define YourBean as being @Dependent scoped (which is btw (currently) the default if a class is not annotated at all).

    0 讨论(0)
提交回复
热议问题