Jersey 2:如何在没有包扫描的情况下绑定注入类?

时间:2013-11-17 21:30:40

标签: java jersey jersey-2.0

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

@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;
    }
}

然后我找到out以便能够在RestServlet中注入RestService我需要使用ResourceConfig绑定器。

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

但我无法弄清楚如何在不定义包的情况下使用ResourceConfig并为每个注入类手动绑定它?

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

1 个答案:

答案 0 :(得分: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属性,或者仅限服务器jersey.config.disableMetainfServicesLookup.server(您可以在ServerProperties类中找到此属性和其他属性):

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

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

        property(ServerProperties.METAINF_SERVICES_LOOKUP_DISABLE, true);
    }
}