gpt4 book ai didi

java - Jersey 将实例注入(inject)资源

转载 作者:行者123 更新时间:2023-12-02 12:25:50 25 4
gpt4 key购买 nike

我正在尝试创建一个 Jersey 资源,以允许我重用 ElasticSearch TransportClient。因此,我想在所有需要它的资源上使用 TransportClient 的单个实例。到目前为止我已经得到了这个:

资源:

@Path("/request")
public class ConfigurationResource {

private final TransportClient transportClient;

@Inject
public ConfigurationResource(TransportClient transportClient)
{
this.transportClient = transportClient;
}

@GET
@Produces(MediaType.TEXT_PLAIN)
public String AlarmStatus(){
if(transportClient != null)
return "Not NULL! ID: ";
else
return "NULL :(";
}
}

绑定(bind):

public class WebMainBinder extends AbstractBinder {
@Override
protected void configure() {
TransportClient transportClient = null;
try {
transportClient = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
return;
}
bind(transportClient).to(TransportClient.class);
}
}

主要应用:

@ApplicationPath("service")
public class WebMain extends ResourceConfig {
public WebMain(){
register(new WebMainBinder());
packages(true, "com.eniacdevelopment.EniacHome.Resources");
}
}

Web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

<servlet>
<servlet-name>com.eniacdevelopment.EniacHome.Application.WebMain</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>com.eniacdevelopment.EniacHome.Application.WebMain</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
</web-app>

我也尝试过使用这样的工厂:

public class TransportClientFactory implements Factory<TransportClient> {

private TransportClient transportClient;

@Override
public TransportClient provide() {
if(this.transportClient == null){
try {
transportClient = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
return null;
}
}

return transportClient;
}

@Override
public void dispose(TransportClient transportClient) {
}
}

然后这样绑定(bind)它:

bindFactory(TransportClientFactory.class)
.to(TransportClient.class).in(Singleton.class);

但是没有成功。我不断收到带有限定符 @Default 的 TransportClient 类型的 Unsatisfied 依赖关系。

非常感谢您的帮助!

最佳答案

我发现 Jersey 的 DI 容器功能非常令人不快。我更喜欢使用 Guice 来管理我的 DI,因此如果您愿意使用 Guice,您可以了解如何连接 Jersey 和 Guice 在此演示项目中进行协作:https://bitbucket.org/marshallpierce/guice-jaxrs-examplescommon 子项目具有共享逻辑,还有其他针对 Jersey 和 Resteasy 特定部分的子项目。

关于java - Jersey 将实例注入(inject)资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40545403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com