1

最初我确实通过这样做手动包含了我的课程

@ApplicationPath("/")
public class RestApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(RestServlet.class);
        classes.add(RestService.class);
        return classes;
    }
}

然后我发现为了能够在 RestServlet 中注入 RestService,我需要使用 ResourceConfig binder。

public class RestApplication extends ResourceConfig {
    public RestApplication() {
        register(new RestBinder());
        packages(true, "");
    }
}

但是我不知道如何在不定义包的情况下使用 ResourceConfig 并为每个注入类手动绑定它?

PS我也不明白如何确保所有包裹扫描都被禁用?

4

1 回答 1

1

您也可以为此目的使用ResourceConfig#register()方法:

public class RestApplication extends ResourceConfig {
    public RestApplication() {
        register(new RestBinder());

        register(RestServlet.class);
        register(RestService.class);
    }
}

通过这种注册,您的包裹不会被扫描以查找任何其他额外的资源或提供者。可发现的提供程序META-INF/services仍会注册到您的应用程序中。对于服务器和客户端,您可以通过属性关闭此功能, jersey.config.disableMetainfServicesLookup或者仅对于服务器(您可以在ServerPropertiesjersey.config.disableMetainfServicesLookup.server类中找到此属性和其他属性):

public class RestApplication extends ResourceConfig {
    public RestApplication() {
        register(new RestBinder());

        register(RestServlet.class);
        register(RestService.class);

        property(ServerProperties.METAINF_SERVICES_LOOKUP_DISABLE, true);
    }
}
于 2013-11-18T09:00:07.510 回答