作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Guice 很陌生,但我有一个单例,我相信通常会这样创建:
@Provides
@Singleton
private SomeClass getSomeClass()
{
return someClassFactory(configuration);
}
但是,我希望尽快对其进行初始化。当我删除 @Singleton
注释并尝试 bind(SomeClass.class).asEagerSingleton()
时,我收到错误:
1) No implementation for SomeClass was bound.
2) A binding to SomeClass was already configured
如何提供使用参数或工厂构造的热切初始化单例?
最佳答案
@Provides
注释是为 SomeClass
配置绑定(bind)的单独方法;它与 bind(SomeClass.class).asEagerSingleton()
绑定(bind)冲突。
要修复此问题,您需要编写一个显式提供程序类并使用 toProvider
绑定(bind)它:
class MyModule extends AbstractModule {
private static class MyProvider implements Provider<SomeClass> {
private final OtherStuff otherStuff;
@Inject
MyProvider(OtherStuff otherStuff) {
// Inject constructor params if your @Provides method took arguments
this.otherStuff = otherStuff;
}
public SomeClass get() {
return new SomeClass(otherStuff);
}
}
protected void configure() {
bind(SomeClass.class).toProvider(MyProvider.class).asEagerSingleton();
}
}
关于java - asEagerSingleton 与工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50233581/
我对 Guice 很陌生,但我有一个单例,我相信通常会这样创建: @Provides @Singleton private SomeClass getSomeClass() { return
我正在使用 Jersey 2 开发 REST API,我需要在启动时实例化我的一些类,而不仅仅是在某些资源请求触发它时实例化。 所以我要问的是:我如何实现下面定义的 SomethingImpl 实例是
我是一名优秀的程序员,十分优秀!