欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在CDI应用程序中使用@Alternative

程序员文章站 2022-03-07 13:19:30
...

在许多情况下,您可能希望拥有一个以上版本的Bean,并将其用于不同的目的。 备用bean的典型理由是出于测试目的,其中备用bean提供模拟数据。 为了获得实时数据,“真实” bean必须连接到的实时系统的好处是远程,或者在测试场景中使用该时间太耗时。 因此,提供了提供静态数据的模拟bean。

在本文中,我将建立一个示例,为购物车提供一个模拟价格清单bean。

如何设置替代的Bean实现

实际和替代bean必须实现相同的接口。 在此示例中,它们实现了PriceList接口。

public interface PriceList {
    String priceList();
}
public class LivePriceList implements PriceList {
    public String priceList() {
        // connect to price list webservice or database
        return "Live Price List";
    }
}

@Alternative注释替代bean,以将其标识为替代实现。

@Alternative
public class MockPriceList implements PriceList {
    public String priceList() {
        // use hard code prices for testing
        return "Mock Price List";
    }
}

可以使用接口作为类型注入PriceList bean。

public class ShoppingCart {

    @Inject
    private PriceList priceList;

    public String ObtainPriceList(){
        return priceList.priceList();
    }

}

在此示例中,实际的PriceList bean在部署时将由CDI注入到ShoppingCart中。

使用替代豆

要使用替代豆你必须标明的价目表豆使用的心愿在beans.xml的文件中使用的版本。

<beans ...>

    <alternatives>
        <class>com.readlearncode.alternatives.MockPriceList</class>
    </alternatives>

</beans>

指定了备用bean的全限定名。

结论

部署应用程序后,CDI容器会将备用MockPriceList注入ShoppingCart bean。

源代码

该示例的源代码可以在ReadLearnCode GitHub存储库中找到。

翻译自: https://www.javacodegeeks.com/2018/01/using-alternative-cdi-application.html