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