【问题标题】:Specifying different subclass implementations in CDI在 CDI 中指定不同的子类实现
【发布时间】:2015-03-15 22:22:05
【问题描述】:

我有两个类,A 和 B,它们需要使用服务。有两个服务,S1 和 S2。 S2 扩展 S1。我希望将 S1 注入 A 类,将 S2 注入 B 类。如何在 CDI 中完成此操作?

public class S1 {}
public class S2 extends S1 {}

public class A {
    @Inject S1 service;  //Ambigious?  Could be S1 or S2?
}

public class B {
    @Inject S2 service;
}

【问题讨论】:

    标签: java cdi weld


    【解决方案1】:

    @Typed 注解启用restricting bean types,以便您可以编写:

    public class S1 {}
    
    @Typed(S2.class)
    public class S2 extends S1 {}
    
    public class A {
        @Inject S1 service;
    }
    
    public class B {
        @Inject S2 service;
    }
    

    在您的部署中,bean 类S2beans types 将被限制为S2Object,这样就只有一个bean 的bean 类型包含S1 类型并且不明确的解析将被解决.

    请注意,@Typed 注释自 CDI 1.0 起可用。

    您也可以依赖限定符,尽管最好将限定符用于功能语义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多