亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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實現依賴注入
  • 參與學習       10142    人
  • 解答問題       14    個

谷歌大神帶你重新理解依賴注入,示范Guice和Spring Boot如何協作

進入課程

Provider綁定

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號