Spring boot:Jersey ResourceConfig需要注释吗?

时间:2017-06-08 08:34:03

标签: java spring-boot jersey

我刚刚开始使用Spring Boot,我想实现一个ResourceConfig,我发现了一些相互矛盾的想法。

采取以下

@Component
public class JerseyExampleConfig extends ResourceConfig {

以上用COMPONENT注释

@Configuration
public class JerseyExampleConfig extends ResourceConfig {

哪一个是正确的?

我认为使用Configuration进行注释将是正确的方法,但似乎在示例中使用了Component。

有什么想法吗?

区别是什么?

3 个答案:

答案 0 :(得分:2)

documentation建议@Component

  

要开始使用Jersey 2.x,只需将spring-boot-starter-jersey作为依赖项包含在内,然后您需要一个类型为@Bean的{​​{1}}注册所有端点:

     
ResourceConfig

documentation还说明了以下内容:

  

您还可以注册实现@Component public class JerseyConfig extends ResourceConfig { public JerseyConfig() { register(Endpoint.class); } } 的任意数量的bean,以进行更高级的自定义。

     

所有已注册的端点都应为ResourceConfigCustomizer s,其中包含HTTP资源注释(@Component等),例如

     
@GET
     

由于@Component @Path("/hello") public class Endpoint { @GET public String message() { return "Hello"; } } 是一个Spring Endpoint,它的生命周期由Spring管理,你可以@Component依赖,并使用@Autowired注入外部配置。 Jersey servlet将被注册并默认映射到@Value。您可以通过将/*添加到@ApplicationPath来更改映射。

答案 1 :(得分:1)

因此,即使您无法决定使用哪个JerseyConfig,您也可以通过阅读其实际含义来确定哪种情况更好:

  

@Configuration表示一个类声明了一个或多个@Bean   方法并且可以由Spring容器处理以生成bean   运行时那些bean的定义和服务请求

     

@Component表示带注释的类是“组件”。这样   在使用时,类被视为自动检测的候选者   基于注释的配置和类路径扫描。

     

@Configuration因此使用@Component进行元注释   @Configuration类是组件扫描的候选者

因此,通过上述说法,您可以使用@Configuration注释您的配置类,但这将是一个不必要的开销。

答案 2 :(得分:1)

他们都使ResourceConfig成为一个Spring Bean,这是使Spring Boot-Jersey集成工作真正需要的全部功能。你甚至可以做到

@SpringBootApplication
class MyApplication {
    public static void main(String... args) {}

    @Bean
    public ResourceConfig jerseyConfig() {
        return new MyResourceConfig();
    }
}

这样,您就不需要@Component@Configuration。它简单地使ResourceConfig成为一个Spring Bean,就像我说的那样,只需要它。

话虽如此,在两个注释之间,@Configuration实际上是用于Spring配置。你可以将你的Spring配置放在ResourceConfig子类中,但我只是将它放在一个单独的配置类中,只是为了保持分离。请注意,配置类也是Spring Beans,这就是@Configuration工作的原因。

另一方面,

@Component是一个通用的注释,它将使类成为一个Spring Bean。这就是所有示例都使用注释的原因,因为ResourceConfig通常不是Spring配置类,并且它比上面的示例更简洁,不使用任何注释。