当前位置: 首页 > 面试题库 >

如何使用Guice的AssistedInject?

柴亦
2023-03-14
问题内容

我已经阅读了https://github.com/google/guice/wiki/AssistedInject,但是没有说明如何传递AssistedInject参数的值。jector.getInstance()调用会是什么样?


问题答案:

检查FactoryModuleBuilder类的javadoc

AssistedInject允许您动态配置Factory类,而不是自己编写。当您的对象具有应注入的依赖项以及在对象创建期间必须指定的某些参数时,这通常很有用。

文档中的示例是 RealPayment

public class RealPayment implements Payment {
   @Inject
   public RealPayment(
      CreditService creditService,
      AuthService authService,
      @Assisted Date startDate,
      @Assisted Money amount) {
     ...
   }
 }

可以看到,CreditService并且AuthService应该由容器注入,但是startDate和amount应该由实例创建过程中的开发人员指定。

因此,而不是注入Payment你注入PaymentFactory与被标记为参数@AssistedRealPayment

public interface PaymentFactory {
    Payment create(Date startDate, Money amount);
}

工厂应该被捆绑

install(new FactoryModuleBuilder()
     .implement(Payment.class, RealPayment.class)
     .build(PaymentFactory.class));

可以将配置好的工厂注入您的班级中。

@Inject
PaymentFactory paymentFactory;

并在您的代码中使用

Payment payment = paymentFactory.create(today, price);


 类似资料:
  • 我在Guice3.0下载的任何地方都没有看到Javadoc jar。 是否有一个包含Javadocs的正式jar可用?或者,除了解压缩源文件并将其指向解压缩的文件夹之外,是否还有其他方法将Eclipse指向Javadocs?

  • 问题内容: 我有一个Swing应用程序,我希望将其从意大利面条转换为对Guice使用依赖项注入。使用Guice提供诸如配置和任务队列之类的服务的过程非常好,但是我现在是从应用程序的GUI开始的,不确定如何进行。 该应用程序基本上是,在中带有一堆标签。每个选项卡都是一个单独的子类,该子类列出了各种组件,并且需要服务才能在按下某些按钮时执行操作。 在当前应用程序中,这看起来像这样: 显然,这并不完全遵

  • 问题内容: 我是否需要创建一个将接口绑定到其他实现的新模块? 我无法触摸厨师课堂或界面。我只是在运行时将Chef的FortuneService绑定到不同接口的客户端。 问题答案: 外观类似于Guice常见问题解答中的“ 机器人腿”部分。“如何创建一个带有两个Leg对象的机器人,左边的一个对象注入一个LeftFoot,右边的一个注入RightFoot。” 但是只有一个在两个上下文中都可以重用的Leg

  • 问题内容: 我试图用guice / dropwizard配置hibernatebundle,需要帮助。我除了dropwizard lib之外,还使用hubspot / dropwizard-guice / 0.7.0 3rd party库。 下面的代码显然无法正常工作,需要帮​​助找出它。我该如何重写它,以便将hibernatebundle以及最终的会话工厂自动注入到需要它的任何bean中。 My

  • 我在使用Guice注入的Factory时遇到问题。 我读过这篇好文章http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/assistedinject/FactoryModuleBuilder.html但我还是不明白。也就是说,为什么模块从未使用过?比如在Guice。createInjector()方法。 我尝

  • 这是一个Java SE应用程序。我只想用Guice注射。我读过关于HK2活页夹的信息,我宁愿使用Guice。我熟悉Guice并经常使用它,但我不知道从哪里开始使用它,几乎我所有的Googlefu都指向基于容器的jersey服务器。我对灰熊也不感兴趣。 那么,我如何实现这一点,以便我可以使用Guice来满足我的注射需求呢?