在CDI应用程序中使用@Alternative

在许多情况下,您可能希望拥有一个以上版本的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值