0

我正在尝试创建一个工厂类来在运行时决定需要注入什么。

我创建了一个生产者工厂:

public class AuthorizationServiceFactory {

    @Inject
    private AuthorizationServiceImpl authorizationService;

    @Produces
    public AuthorizationService getService() {
        //decide here
    }
}

授权服务是一个接口:

public interface AuthorizationService {
    //methods here
}

而且我只有一个接口实现(我计划有更多,但我正在简化以使其工作):

public class AuthorizationServiceImpl implements AuthorizationService {
    //implementation here
}

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

@Inject
protected AuthorizationService authorizationService;

它给了我一个Ambiguous dependencies for type [AuthorizationService] with qualifiers [@Any] at injection point blablabla...

我意识到它有两种可能性,生产者工厂和实施本身。我尝试用@Default 注释工厂方法,用@Alternative 注释另一个类,但是我需要在工厂中注入一个 AuthorizationServiceImpl 并且它说它对注入无效。

Unsatisfied dependencies for type [AuthorizationServiceImpl] with qualifiers [@Default] at injection point blablabla...

有没有办法指定工厂方法是它如何产生接口并且仍然能够注入一个实例以便工厂返回它而不创建一些注释接口?

更多信息,我实际上正在这样做,因为我希望工厂方法基于数​​据库值生成正确的 AuthorizationService。

4

1 回答 1

0

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

于 2013-04-21T18:09:12.003 回答