Dependency injection 方法上的Guice依赖项注入,第一步

Dependency injection 方法上的Guice依赖项注入,第一步,dependency-injection,guice,Dependency Injection,Guice,我正在使用Java1.6和Guice3.0,我正在尝试让依赖注入工作起来。 我想从手动依赖注入切换到guice 这是我的类,我想在这里使用依赖项: public class QSManager implements IQSManager { private IPdfManager pdfManager; @Inject public void setPdfManager(IPdfManager pdfManager){ this.pdfManager =

我正在使用Java1.6和Guice3.0,我正在尝试让依赖注入工作起来。 我想从手动依赖注入切换到guice

这是我的类,我想在这里使用依赖项:

public class QSManager implements IQSManager {
    private IPdfManager pdfManager;
    @Inject
    public void setPdfManager(IPdfManager pdfManager){
        this.pdfManager = pdfManager;
    }
@Singleton
public class PdfManager implements IPdfManager {
这是我的经理模块

public class PdfManagerModule implements Module {

    @Override
    public void configure(Binder binder) {
         binder.bind(IPdfManager.class).to(PdfManager.class).in(Singleton.class);
    }
}
以及我想要的依赖:

public class QSManager implements IQSManager {
    private IPdfManager pdfManager;
    @Inject
    public void setPdfManager(IPdfManager pdfManager){
        this.pdfManager = pdfManager;
    }
@Singleton
public class PdfManager implements IPdfManager {
但如果我运行它,它永远不会注入依赖项。例如:

  • 我创建主应用程序:QSManager=newqsmanager(params)
  • 我尝试注入:manager.test(),其中test是System.out.println(pdfManager);返回空值

  • 有人能给我指出正确的方向或指出错误吗?谢谢大家!

    将配置中的接口绑定到:

    bind(IQSManager.class).to(QSManager.class);
    
    并使用Guice创建
    QSManager
    ,而不是使用
    new

    Injector-Injector=Guice.createInjector(新的PdfManagerModule());
    IQSManager manager=injector.getInstance(IQSManager.class);
    manager.test();
    
    即使我想将PdfManager注入我的QSManager?是的
    Guice
    在QSManager创建该实例时为其注入依赖项。如果只使用
    new
    ,则会绕过Guice。看看@MemLeak,甚至不是,而是因为你想要它。如果您希望依赖项注入工作,则必须在任何需要新实例的地方使用DI容器。毕竟,如果你不告诉Guice,Guice怎么知道你想注射什么呢?真的很抱歉,这是我思维中的一个逻辑问题。在GoogleIO演示中,他们说:在调用构造函数之后,会发生带有setters的DI。但是guice应该如何知道何时调用ctr呢。谢谢你们!当你是DI新手时的一个提示:永远不要使用“新”。。。