Java 向资源中注入对象
无法确定如何在jersey资源中访问jersey server start上创建的对象。基本上,我想做的是将数据库上下文注入到资源中 JerseyServer:Java 向资源中注入对象,java,rest,dependencies,jersey,code-injection,Java,Rest,Dependencies,Jersey,Code Injection,无法确定如何在jersey资源中访问jersey server start上创建的对象。基本上,我想做的是将数据库上下文注入到资源中 JerseyServer: public boolean startServer(String keyStoreServer, String trustStoreServer) { //Check if GraphDb is setup if (gdbLogic == null) { //FIXME - maybe throw an
public boolean startServer(String keyStoreServer, String trustStoreServer) {
//Check if GraphDb is setup
if (gdbLogic == null) {
//FIXME - maybe throw an exception here?
return false;
}
// create a resource config that scans for JAX-RS resources and providers
// in org.developer_recommender.server package
final org.glassfish.jersey.server.ResourceConfig rc = new org.glassfish.jersey.server.ResourceConfig().packages("org.developer_recommender.server").register(createMoxyJsonResolver());
WebappContext context = new WebappContext("context");
ServletRegistration registration = context.addServlet("ServletContainer", ServletContainer.class);
//TODO: value setzen
registration.setInitParameter("jersey.config.server.provider.packages", "org.developer_recommender.server.service;org.developer_recommender.server.auth");
registration.setInitParameter(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, SecurityFilter.class.getName());
SSLContextConfigurator sslContext = new SSLContextConfigurator();
sslContext.setKeyStoreFile(keyStoreServer);
sslContext.setTrustStoreFile(trustStoreServer);
//TODO -
sslContext.setKeyStorePass("123456");
sslContext.setTrustStorePass("123456");
// create and start a new instance of grizzly http server
// exposing the Jersey application at BASE_URI
HttpServer server = null;
try{
SSLEngineConfigurator sslec = new SSLEngineConfigurator(sslContext).setClientMode(false).setNeedClientAuth(true);
server = GrizzlyHttpServerFactory.createHttpServer(getBaseURI()/*URI.create(BASE_URI)*/, rc, true , sslec);
System.out.println("Jersey app started. Try out " + BASE_URI);
context.deploy(server);
return true;
} catch(Exception e ){
System.out.println(e.getMessage());
}
return false;
服务:
public class Service {
@Inject
protected GDBLogic gbdLogic;
}
所以我希望startServer中的GDBLogic实例可以在Jersey资源中访问。有没有关于如何实现这一目标的建议?
我不想使用GDBLogic的静态字段来实现这一点,因为我们将至少有两种不同的数据库配置。您需要设置实例绑定以使注入工作。您可以通过向资源配置中添加HK2抽象绑定器来实现这一点:
final ResourceConfig rc = new ResourceConfig()
.packages("org.developer_recommender.server")
.register(createMoxyJsonResolver())
.register(new AbstractBinder()
{
@Override
protected void configure()
{
bind(gdbLogic).to(GDBLogic.class);
}
});
可能重复: