JAX-RS - Spring 启动与不启动 Spring 启动

JAX-RS - Spring Boot vs without Spring Boot

我想使用 Spring 引导和 JAX-RS(Jersey 实现)。如果我们不使用 Spring Boot,我们可以使用以下代码来注册所有 Rest 服务 类

@ApplicationPath("/myrest")
public class MyApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(HelloWorld.class);
        return s;
    }
}

这在支持 Servlet 3.0 的容器中工作正常。

但是当我们使用 Spring Boot with JAX-RS(Jersey) 为什么我们必须从 org.glassfish.jersey.server.ResourceConfig 扩展 为什么从 javax.ws.rs.core.Application 扩展不起作用?

But when we use Spring Boot with JAX-RS(Jersey) why do we have to extend from org.glassfish.jersey.server.ResourceConfig Why extending from javax.ws.rs.core.Application doesn't work?

因为 Spring Boot 使用 ResourceConfig 类型作为它注入到其自动配置器中的服务,即 JerseyAutoConfiguration。如果你查看源代码,你会看到

@Autowired
private ResourceConfig config;

从那里,Sprig Boot 使用该实例配置应用程序。如果 ResourceConfig bean 在 Spring 上下文中不可用,则不会发生自动配置。