为了账号安全,请及时绑定邮箱和手机立即绑定

Provider绑定

还是不明白Provider绑定有什么用,感觉就类似于一工厂么,需要的时候创建一个bean,但是如果在configure()方法里面注入的话缺又相当于一个单例bean(前提开发人员不去new),有点搞不懂...,请问它到底用在什么地方?另外对于非接口类型的依赖无需代码绑定,Guice会自动创建,那么就没必要使用Provider啊,需要的时候Guice总会给我一个

正在回答

4 回答

稍微改了下代码, 这种情况下, 似乎只有使用 Provide 了

trait Db

class MemoryDb extends Db

@Singleton
class DatabaseActor @Inject() (@Name("MemoryDb") db: Db) extend Actor {    
    // ......
}  

// 这里还是使用的 bind 来绑定注入
class DbClient @Inject() (@Name("DbActor") actorRef: ActorRef)  

// ActorSystem 可以由启动类中来实例化
class MyModule(system: ActorSystem) extends AbstractModule with ScalaModule {         bind[Db].annotatedWith(Names.named("MemoryDb")).to[MemoryDb]
    
    @Provides
    @Named("DbActor")
    // 这里的参数 Db 只有靠 Provide 的绑定传递了.
    def dbActorRef(db: Db): ActorRef = {
       system.actorOf(Props.create(classOf[DbActor], db))
    }
}


0 回复 有任何疑惑可以回复我~

又想了想, 如果这么写, 好像确实可以不用 Provide (但Provide 提供的延迟加载的能力, bind 无法实现)

@Singleton
class DatabaseActor extend Actor {
    // ......
} 

// 这里还是使用的 bind 来绑定注入
class DbClient @Inject() (@Name("Database") actorRef: ActorRef) 

// ActorSystem 可以由启动类中来实例化
class MyModule(system: ActorSystem) extends AbstractModule with ScalaModule {     
    bind[ActorRef].annotatedWith(Names.named("Database"))
        .toInstance(system.actorRef(Props.create(classOf[DatabaseActor])))
}


0 回复 有任何疑惑可以回复我~

如果一个类的构造方法不是由你控制的, 比如 Akka 里的 ActorRef 的实例方法, 源码对外只提供了 ActorSystem.actorOf()这种方式, 这个时候就需要使用 Provider 来告诉 Guice ActorRef 的实例如何来构造

这里的 actorRef 的实例化方式只能由 ActorSystem.actorOf() 实现

class DatabaseActor extend Actor {
    // ......
}

// 这里 Guice 会使用 provide 中提供的 DatabaseActor 的构造方法来注入
class DbClient @Inject() (@Name("Database") actorRef: ActorRef)

class MyModule extends AbstractModule with ScalaModule {

    bind[ActorSystem].toInstance(ActorSystem("DbSystem"))

    @Provides
    @Singleton
    @Name("Database")
    def generateDbActor(system: ActorSystem): ActorRef {
        system.actorOf(Props.create(classOf[DatabaseActor]))
    }
}


0 回复 有任何疑惑可以回复我~

很好的问题 同问

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
使用Google Guice实现依赖注入
  • 参与学习       10077    人
  • 解答问题       12    个

谷歌大神带你重新理解依赖注入,示范Guice和Spring Boot如何协作

进入课程

Provider绑定

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信