我正在尝试使用guice,我想在JavaPlay2.6中创建一个单例随机webservice客户端
现在我有了WS-client,它作为java播放模块加载。当我运行应用程序时,没有问题,我的客户机能够使用java play配置(com.typesafe.config.config
),这是注入的。但是如果我尝试在其他任何地方使用我的客户机,我会得到一个错误,说没有com的实现。类型安全。配置。配置已绑定
。
这是我的(非常简单的)客户:
import play.Logger;
import com.typesafe.config.Config;
@Singleton
public class MyClient {
final Config config;
@Inject
public MyClient(Config config) {
this.config = config;
Logger.warn("constructor called")
Logger.warn("Some config param:"+config.getString("some_param"))
}
public void doSomething() {
Logger.warn("doSomething() called")
}
}
实现Guice的AbstractModule的我的模块:
import com.google.inject.AbstractModule;
public class MyClientModule extends AbstractModule {
@Override
protected void configure() {
bind(MyClient.class).asEagerSingleton();
}
}
当我告诉Play在applicationf中将其用作模块时。conf
,它可以工作(我在控制台中得到名为“的”构造函数和
“Some config param”
警告日志):
play {
modules {
enabled += external.MyClientModule
}
}
但是如果我尝试从我的
家庭控制器调用它
:
public class HomeController extends Controller {
public Result index() {
Injector myClientInjector = Guice.createInjector(new MyClientModule());
MyClient myClient = myClientInjector.getInstance(MyClient.class);
return ok(views.html.index.render());
}
}
然后我得到以下错误:
[CreationException: Unable to create injector, see the following errors:
1) No implementation for com.typesafe.config.Config was bound.
while locating com.typesafe.config.Config
for the 1st parameter of external.MyClient.<init>(MyClient.java:121)
at external.MyClientModule.configure(MyClientModule.java:8)
1 error]
我很确定这里有一些错误,那么绑定它然后使用它的正确方法是什么?
asagersingleton()绑定意味着它的绑定速度尽可能快。在本例中,配置尚未绑定,因此失败。
使用
bind(MyClient.class).in(Singleton.class)
当需要的时候,它会把它作为一个单例绑定起来。
在HomeController中,使用构造函数注入:
@Inject
public HomeController (final MyClient myclient) {
this.myclient = myclient;
}
您可以像这样注释1个构造函数,因此它需要包含您想要注入的所有类。您可以组合构造函数和字段注入,但不建议这样做。
在HomeController中,使用构造函数注入:
@Inject
public HomeController (final MyClient myclient) {
this.myclient = myclient;
}
您可以像这样注释1个构造函数,因此它需要包含您想要注入的所有类。您可以组合构造函数和字段注入,但不建议这样做。
问题内容: 我有一个注释,该注释根据此惯用法接收“动态”参数,即接口类型的参数。简而言之: 现在,要评估此参数,我需要创建提供的实现的实例。上面链接的答案是在运行时执行的。但是,我正在按照本教程编写“实时”(即编译时)注释处理器。使用类型时,必须考虑它们可能尚未编译。本教程以以下方式处理该问题(在这种情况下,检索类型的名称): classTypeMirror.asElement(); qualif
问题内容: 当我阅读 Effective Java时 ,作者告诉我,单元素类型是实现单例的最佳方法,因为我们不必考虑复杂的序列化或反射攻击。这意味着我们无法创建使用反射的实例,对吗? 我已经做了一些测试,并在这里上课: 然后我尝试创建一个实例: 如您所知,它不起作用。当我更改关键字来,它的工作原理。我想知道为什么。谢谢。 问题答案: 这是语言内置的。根据Java语言规范(§8.9): 尝试显式实例
关于实时上色 通过将图稿转换为实时上色组,您可以任意对它们进行着色,就像对画布或纸上的绘画进行着色一样。您可以使用不同颜色为每个路径段描边,并使用不同的颜色、图案或渐变填充每个封闭路径(注意,并不仅仅是封闭路径)。 “实时上色”是一种创建彩色图画的直观方法。通过采用这种方法,您可以使用 Illustrator 的所有矢量绘画工具,而将绘制的全部路径视为在同一平面上。也就是说,没有任何路径位于其他路
关于色板 色板 是命名的颜色、色调、渐变和图案。与文档相关联的色板出现在“色板”面板中。色板可以单独出现,也可以成组出现。 可以打开来自其他 Illustrator 文档和各种颜色系统的色板库。色板库显示在单独的面板中,不与文档一起存储。 “色板”面板和色板库面板可包括以下类型的色板: 印刷色 印刷色使用四种标准印刷色油墨的组合打印:青色、洋红色、黄色和黑色。默认情况下,Illustrator 将