Java指定默认值

时间:2013-04-19 14:45:41

标签: java-ee cdi

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

我创建了一个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。

1 个答案:

答案 0 :(得分:0)

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