云烟成雨_jing
2022-03-10
尝试使用 @BeforeEach 代替 @Before 注解。
春秋文武
2021-09-13
慕设计6480045
2021-08-27
抽象可以使用接口来表示,具体就是具体的实现类。configuration的作用就是把具体的实现类和接口绑定起来。
长袜子皮皮93
2019-11-10
长袜子皮皮93
2019-11-10
长袜子皮皮93
2019-10-26
稍微改了下代码, 这种情况下, 似乎只有使用 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))
}
}
慕雪3588548
2019-08-07
bbmouse
2019-06-01
需要,行,视情况而定
sunbohan00
2018-12-06
因为final 修饰后定义时必须实例化,而且其他地方不能修改
慕仔7109905
2018-07-04
这个两个@Inject是有区别的:1. Test 就像是客户端去用这些Injections,所以首先得像老师原来在App.java的main函数里面那样初始化Guice的Module,这样Guice才能知道哪个interface绑定的是那个实现class. 2. @Inject private PaymentService paymentService 这种写法跟contractor注入是一样的,就是一个标准,让Guice知道这里是注入,让Guice通过第一步Module里面的配置去找。
慕标0391405
2018-07-02
我觉得
如果要自动化: 就只使用 spring ,不要混入 Guice。老师最后的总结中也说了这个问题,spring项目的话就使用spring的注入就好了,没必要引入Guice,但是有可能你引用别人的项目,别人使用的是Guice,这时就要用到老师课程中的混合啦。
刚开始看第7章,看到那么多的 @Bean ,头都大了。 但是,看到后面就没那多多了(好像只剩下两个了,有一个是引入`com.google.inject.Injector`的,这个应该是必须的)。 后面都重构了的。你可以下载源码看下。
不然每一个guice组件都要在spring @Bean手动注入,逻辑业务组件一多起来,这样感觉也挺麻烦的
我的理解是: 使用 @Bean 引入 `com.google.inject.Injector` 就可以了,其他的都交给 Guice
慕妹808790
2018-04-24
解决了,是包安装的不对,这个是在com.google.inject.extensions包里面的
慕容7154540
2018-01-10
首先非常谢谢同学的肯定。
运行时的话,Inject一个Injector,然后通过Injector来getInstance。在与spring协作这里就是这么用的。
一个module需要另一个module的话,用install,然后就可以inject别人绑定的实例了。当然如果有重复绑定,需要用Modules.override。
new_chapter
2018-01-06
另外,非常感谢同学对我课程的肯定。非常高兴能看到我的课程给大家带来收获。
qq_风雪之隅_1
2017-11-11
这不好。Guice Injector和Spring ApplicationContext一样,本身都被设计成singleton,有很多状态需要管理。还是不要挑战这种违背设计意图的事情比较好。
慕少3238855
2017-10-20
注入的是支持的货币类型,是一个set类型
定义module绑定
package org.demo.guicedemo.server.impl;
import com.google.inject.AbstractModule;
import com.google.inject.multibindings.Multibinder;
public class ChinaModule extends AbstractModule {
@Override
protected void configure() {
// Adds CNY support
Multibinder.newSetBinder(binder(), String.class)
.addBinding().toInstance("CNY");
}
}就会往集合中添加值CNY
package org.demo.guicedemo.server.impl;
import com.google.inject.AbstractModule;
import com.google.inject.multibindings.Multibinder;
public class GlobalModule extends AbstractModule {
@Override
protected void configure() {
// Adds EUR, USD support
Multibinder<String> currencyBinder =
Multibinder.newSetBinder(binder(), String.class);
currencyBinder.addBinding().toInstance("EUR");
currencyBinder.addBinding().toInstance("USD");
}
}就会往集合中添加值EUR和USD
qq_Peu_1
2017-10-13
试试吧,万一能呢
乐天乐橙
2017-10-12