java – 依赖注入基于条件
发布时间:2020-12-14 16:41:11 所属栏目:Java 来源:网络整理
导读:我正在使用Google Guice进行依赖注入.假设我有以下几点: public interface Payment { public void pay();}public class PaymentCardImpl implements Payment { public void pay() { System.out.println("I pay with a card"); }}public class PaymentCashIm
我正在使用Google Guice进行依赖注入.假设我有以下几点:
public interface Payment { public void pay(); } public class PaymentCardImpl implements Payment { public void pay() { System.out.println("I pay with a card"); } } public class PaymentCashImpl implements Payment { public void pay() { System.out.println("I pay cash"); } } public class Order { private Payment payment; @Inject public Order(Payment payment){ this.payment=payment; } public void finishOrder(){ this.payment.pay(); } } 接下来就是一个非常简单的绑定模块,就像这样: public class MyModule extends AbstractModule { @Override protected void configure() { bind(Payment.class).to(PaymentCashImpl.class); } } 您可以看到,Payment实例被注入到Order构造函数中.这是在MyModule类中完成的,总体来说真的很酷. 我的主要看起来像: public static void main(String[] args) { MyModule module = new MyModule(); Injector injector = Guice.createInjector(module); Order order = injector.getInstance(Order.class); order.finishOrder(); } 然而,我看不到的是,我如何可以结合某种方式来有条件地将PaymentCardImpl或PaymentCashImpl实例绑定到Order构造函数. 比方说,订单是“在线”订单.我会需要这样做: bind(Payment.class).to(PaymentCardImpl.class); 最好的方式是做什么?我是新来的依赖注入. 解决方法
您可以注释要注入哪一个.如果你做一个命名的绑定,它将解决问题.
见下文: bind(Payment.class).annotatedWith(Names.named("Card")).to(PaymentCardImpl.class); bind(Payment.class).annotatedWith(Names.named("Cash")).to(PaymentCashImpl.class); 然后你想注射你做: @Named("Cash") Payment payment 要么: @Named("Card") Payment payment (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |