2016-08-16 40 views
0

得到它,我想MyObject類實例設定爲應用背景,這樣我可以用下面的任何地方使用它:如何設置對象上下文,這樣我可以在任何地方的應用與@Context

@Context MyObject object

我用Jedis通過上面的方法給我訪問jedis

請幫助設置上下文。我正在使用dropwizard (jetty,jersery and jackson)

+0

這聽起來像是方面的濫用。你的MyObject實際上是否有任何上下文信息?這聽起來更像是一個注入框架的工作 – pandaadb

+0

歡迎來到Stack Overflow!您能否在解決問題的努力中獲得更好的標題和更詳細的內容信息? – manetsus

回答

0

我有一些時間,寫了一些方法來做到這一點(只有球衣,沒有其他的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),這使得這些事情變得非常簡單。

問候,

阿圖爾

+0

我有一個TestClass並從資源類中初始化它。在TestClass裏面我已經按照你的說法注入了,但實例是空的。 BUt我可以訪問注入的實例,如果我將它注入Resource類。 – Vicky

+0

TestClass未被注入,因爲它不是由球衣創建的,而是由您創建的。澤西對此一無所知,因此不會注入。 – pandaadb

+0

不,你讓我錯了。我在我的TestClass中注入MyObject,但它始終爲空。我無法從TestClass訪問MyObject的成員。 – Vicky

相關問題