2015-09-05 51 views
2

我有以下類:澤西2化妝類/對象持續整個應用程序

package com.crawler.c_api.rest; 

import com.crawler.c_api.provider.ResponseCorsFilter; 
import java.util.logging.Logger; 

import org.glassfish.jersey.filter.LoggingFilter; 
import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.server.ServerProperties; 

public class ApplicationResource extends ResourceConfig { 

    private static final Logger LOGGER = null; 

    public ServiceXYZ pipeline; 

    public ApplicationResource() { 
     System.out.println("iansdiansdasdasds"); 
     // Register resources and providers using package-scanning. 
     packages("com.crawler.c_api"); 

     // Register my custom provider - not needed if it's in my.package. 
     register(ResponseCorsFilter.class); 

     pipeline=new ServiceXYZ(); 

     //Register stanford 
     /*Properties props = new Properties(); 
     props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref"); 
     pipeline = new StanfordCoreNLP(props);*/ 

     // Register an instance of LoggingFilter. 
     register(new LoggingFilter(LOGGER, true)); 

     // Enable Tracing support. 
     property(ServerProperties.TRACING, "ALL"); 
    } 
} 

我想使可變管道持續整個應用程序,所以我可以一次初始化服務,並在所有其他使用它類。

我該怎麼做?

回答

2

看看Custom Injection and Lifecycle Management。它會給你一些關於如何使用Jersey進行依賴注入的想法。舉個例子,你首先需要將服務綁定到注入框架

public ApplicationResource() { 
    ... 
    register(new AbstractBinder(){ 
     @Override 
     public void configure() { 
      bind(pipeline).to(ServiceXYZ.class); 
     } 
    }); 
} 

然後,你可以注入ServiceXYZ到您的任何資源類或供應商(如過濾器)。

@Path("..") 
public class Resource { 
    @Inject 
    ServiceXYZ pipeline; 

    @GET 
    public Response get() { 
     pipeline.doSomething(); 
    } 
} 

上述配置將單個(單例)實例綁定到框架。

額外:-)不是爲你的用例,而是說例如你想爲每個請求創建一個新的服務實例。然後你需要把它放在請求範圍內。

bind(ServiceXYZ.class).to(ServiceXYZ.class).in(RequestScoped.class); 

請注意區別bind。第一個使用實例,而第二個使用該實例。沒有辦法在請求範圍內以這種方式綁定實例,所以如果您需要特殊的初始化,那麼您需要使用Factory。你可以在我上面提供的鏈接中看到一個例子

+0

再次感謝:)似乎更復雜,然後我想。稍後會看看! –

+0

其實並沒有那麼複雜。您可以複製並粘貼第一個代碼片段,然後只需將註釋添加到您需要的地方 –

+0

好極了!有用。沒有不復雜;) –