Java 理解重头戏2.4依赖注入

Java 理解重头戏2.4依赖注入,java,playframework,dependency-injection,guice,playframework-2.4,Java,Playframework,Dependency Injection,Guice,Playframework 2.4,我有一些问题需要理解如何在Play2.4中应用依赖注入的新特性。我熟悉Play文档中的Guice和miss,它们解释了实际绑定是如何以及何时发生的。我阅读了官方文件[1],并试图以最新的Play Mailer[2]为例。Play Mailer示例使用任意类并用@inject注释MailerClient属性。当我尝试使用此类的对象时,属性为null,至少在调试时是这样。那么,我必须在何时何地进行实际注射?对于@singleton注释,我也有同样的问题。只是解释了如何注释它,而不是如何获取对象。我必

我有一些问题需要理解如何在Play2.4中应用依赖注入的新特性。我熟悉Play文档中的Guice和miss,它们解释了实际绑定是如何以及何时发生的。我阅读了官方文件[1],并试图以最新的Play Mailer[2]为例。Play Mailer示例使用任意类并用@inject注释MailerClient属性。当我尝试使用此类的对象时,属性为null,至少在调试时是这样。那么,我必须在何时何地进行实际注射?对于@singleton注释,我也有同样的问题。只是解释了如何注释它,而不是如何获取对象。我必须直接使用Guice吗,或者它是如何集成的

[1]


[2]

我相信,绑定是通过添加到发生的。为MailerClient提供GUI绑定

play {
  modules {
    enabled += "play.api.libs.mailer.MailerModule"
  }
为了让Guice将MailerClient注入到对象中,应该通过Guice创建它。例如,如果您想在控制器中使用@Inject MailerClient或将服务注入控制器,则需要通过GUI注入控制器。正在将以下内容添加到build.sbt中:

routesGenerator := InjectedRoutesGenerator

你能给我们看看你的代码吗?它基本上就像官方的Play Mailer示例。我在另一个类中启动MyComponent并调用sendMail方法。我对此也感到困惑,希望看到更多的例子。我正在编写一些S3代码,我有一个S3File对象,它依赖于S3Service,应该注入S3Service。如何创建一个新的S3File实例,并将S3Service注入其中?我是否在控制器中创建喷油器?在这种情况下,我想我会使用'injector.getInstanceS3File.class'而不是'news3File'?如何创建注入器——必须创建一个特定的impl of AbstractModule来为这个类进行绑定,这似乎有些过分。如果我的接口上的@ImplementedBy不这样做,它会做什么?是的,没错。我就是这么想的。它必须通过Guice注入。我理解如何使用InjectedRoutesGenerator实现这一点,因为这里有一些实例正在进行注入。但在Play Mailer的文档中,这不是在控制器中完成的,而是在随机类中完成的。那么谁负责呢?@linsenfips如果字段MailerClient应该被注入,那么这个“随机类”对象必须通过Guice创建。或者,如果您想完全跳过DI,可以使用构造函数/设置器手动设置字段。谢谢!我就是这么想的。但我还是要问:我该怎么做呢。Play开发者将Guice紧密集成到框架中。那么,通过Guice创建对象的正式方式是什么?@linsenfips您可以创建一个自定义Guice模块来提供绑定。Play允许您使用Play.modules.enabled添加自定义GUI模块。请参见中的示例。现在您在Guice领域,有几种方法可以向injector提供自定义实例;其中一个选项是在您的Guice模块中创建一个具有任意名称的方法,以返回MailerClient并使用@Provides对其进行注释。