Jakarta ee Java指定默认值

Jakarta ee Java指定默认值,jakarta-ee,cdi,Jakarta Ee,Cdi,我试图创建一个工厂类,在运行时决定需要注入什么 我创建了一个生产工厂: public class AuthorizationServiceFactory { @Inject private AuthorizationServiceImpl authorizationService; @Produces public AuthorizationService getService() { //decide here } } 授权服务是一

我试图创建一个工厂类,在运行时决定需要注入什么

我创建了一个生产工厂:

public class AuthorizationServiceFactory {

    @Inject
    private AuthorizationServiceImpl authorizationService;

    @Produces
    public AuthorizationService getService() {
        //decide here
    }
}
授权服务是一个接口:

public interface AuthorizationService {
    //methods here
}
我只有一个接口实现(我计划有更多,但我正在简化以使其工作):

在我的另一个类中,我尝试注入,如下所示:

@Inject
protected AuthorizationService authorizationService;
它在注入点blabla…

我意识到它有两种可能性,生产者工厂和实施本身。我试着用@Default注释工厂方法,用@Alternative注释另一个类,但是我需要在工厂中注入AuthorizationServiceImpl,它说注入时它不是活动的

Unsatisfied dependencies for type [AuthorizationServiceImpl] with qualifiers [@Default] at injection point blablabla...
是否有任何方法可以指定工厂方法是如何生成接口的,并且仍然能够注入实例,以便工厂在不创建某些接口的情况下返回实例


更多信息,我这样做实际上是因为我希望工厂方法基于数据库vaue生成正确的授权服务。

您应该阅读CDI替代方案,它完全满足您的需求,而不需要工厂。实际上,您引入了一个“替代”限定符,它描述了非默认实现,并允许有人在beans.xml中激活它。

我想根据系统切换(在DB或属性文件中)来选择替代方案如果不更改打包的应用程序,那么您可能需要尝试使用限定符来限定注入bean的所有实例。
Unsatisfied dependencies for type [AuthorizationServiceImpl] with qualifiers [@Default] at injection point blablabla...