gpt4 book ai didi

java - 从数据库参数 CDI 动态注入(inject)服务

转载 作者:行者123 更新时间:2023-12-02 01:19:52 26 4
gpt4 key购买 nike

我有一些服务实现相同的接口(interface)。我想根据数据库中的参数动态使用服务。

我想使用 CDI 注释,但如果不可能,请告诉我如何实现它?一个工厂 ?

我们有多个提供相关服务的提供商,并且遵循数据库中的规则,我们将使用服务或其他

Service1 implements IService1, IGeneralService{

public void run(){...};}

Service2 implements IService2, IGeneralService{

public void run(){...};}

然后我将根据数据库参数(例如国家/地区或其他)使用它。

public class Test{
@IGeneralService service;

public void getRunMethod(String numberService){
service.run() (here it run the right service)
}
}

类似的东西。任何想法 ?

最佳答案

是的,你的测试类看起来很像一个工厂。继续使用你所拥有的,它可能看起来像这样:

public class Test{
@IGeneralService service0;
@IGeneralService service1;

public void getRunMethod(String numberService){
if(numberService == '0')
service0.run()
if(numberService == '1')
service1.run()
}
}

您可以对如何管理服务列表( map 、列表)更加感兴趣。但这里的缺点可能是您必须显式注入(inject)每个服务。

您还可以采用另一条路线并将 BeanManager 注入(inject)到您的工厂中:

public class Test{
@Inject
BeanManager bm;

public void getRunMethod(String numberService){
IGeneralService svc = (IGeneralService) bm.getBeans(numberService).iterator().next();
svc.run();
}
}

现在您不需要显式注入(inject)每个服务。

这些是您可以在此处使用的两种基本方法。哪个更好取决于您的用例。

关于java - 从数据库参数 CDI 动态注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57909569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com