得到它,我想MyObject
類實例設定爲應用背景,這樣我可以用下面的任何地方使用它:如何設置對象上下文,這樣我可以在任何地方的應用與@Context
@Context MyObject object
我用Jedis
通過上面的方法給我訪問jedis
。
請幫助設置上下文。我正在使用dropwizard (jetty,jersery and jackson)
。
得到它,我想MyObject
類實例設定爲應用背景,這樣我可以用下面的任何地方使用它:如何設置對象上下文,這樣我可以在任何地方的應用與@Context
@Context MyObject object
我用Jedis
通過上面的方法給我訪問jedis
。
請幫助設置上下文。我正在使用dropwizard (jetty,jersery and jackson)
。
我有一些時間,寫了一些方法來做到這一點(只有球衣,沒有其他的DI框架使用)。
Jersey符合javax.inject註釋。您不使用上下文註釋的原因是(根據它的聲音),您的MyObject類不是上下文對象(例如,它不隨每個請求(例如,可注入的HttpServletRequest)而改變)。所以我們需要綁定你的對象。
考慮我的實現MyObject來的:在我的球衣類(資源,過濾等)
public class MyObject {
String get() {
return "I am an object";
}
}
該對象需要是可用的。我寫了使用這種豆一點點資源:
@Path("context")
public class ContextResource {
@Inject
MyObject o;
@GET
public String get() {
return o.get();
}
}
請注意,我用的是javax.inject.Inject註解針對這種情況,告訴球衣我想注入這個特殊的豆。 現在我需要做的就是告訴球衣這件豆子。在我的DW應用程序中,我這樣做:
public class Application extends io.dropwizard.Application<Configuration>{
@Override
public void run(Configuration configuration, Environment environment) throws Exception {
environment.jersey().register(ContextResource.class);
environment.jersey().register(new AbstractBinder() {
@Override
protected void configure() {
bind(MyObject.class).to(MyObject.class);
}
});
}
public static void main(String[] args) throws Exception {
new Application().run("server", "/home/artur/dev/repo/sandbox/src/main/resources/config/test.yaml");
}
}
請注意,我正在使用綁定器綁定我的bean。語法看起來很時髦,但本質上它是在「將類型綁定到實現」。因爲我喜歡的類型是我實現(我不使用myObject的接口),這看起來像:
bind(MyObject.class).to(MyObject.class)
現在的球衣知道我的豆並愉快地注入它。
運行的所有我的代碼打印:
[email protected]:~/dev/vpn$ curl localhost:9085/api/context
I am an object
希望帶來關於如何使用注射沒有一個框架的一些見解。就個人而言,我會推薦使用guice和dropwizard(google:dropwizard-guicey),這使得這些事情變得非常簡單。
問候,
阿圖爾
這聽起來像是方面的濫用。你的MyObject實際上是否有任何上下文信息?這聽起來更像是一個注入框架的工作 – pandaadb
歡迎來到Stack Overflow!您能否在解決問題的努力中獲得更好的標題和更詳細的內容信息? – manetsus