我正在尝试创建一个工厂类来在运行时决定需要注入什么。
我创建了一个Producer Factory:
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...
我意识到它有两种可能性,即Producer工厂和Implmentation本身。我尝试用@Default注释工厂方法,用@Alternative注释另一个类,但是我需要在工厂中注入一个AuthorizationServiceImpl,它说它不能用于注入。
Unsatisfied dependencies for type [AuthorizationServiceImpl] with qualifiers [@Default] at injection point blablabla...
有没有办法指定工厂方法是如何生成接口的,并且仍然可以注入一个实例,以便工厂返回它而不创建一些注释接口?
更多信息,我实际上是这样做的,因为我希望工厂方法根据数据库vaue生成适当的AuthorizationService。
答案 0 :(得分:0)
您应该阅读CDI替代品,它可以完全满足您的需求而无需工厂。您基本上引入了一个“Alternate”限定符,它描述了非默认实现,并允许某人在beans.xml中激活它。