繁体   English   中英

春季启动:Jersey ResourceConfig需要注释吗?

[英]Spring boot: Jersey ResourceConfig needs annotating?

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

采取以下

@Component
public class JerseyExampleConfig extends ResourceConfig {

上面用COMPONENT注释

@Configuration
public class JerseyExampleConfig extends ResourceConfig {

哪一个是正确的?

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

有任何想法吗 ?

有什么不同?

文档建议使用@Component

要开始使用2.x的球衣只是包括spring-boot-starter-jersey作为一个依赖,那么你就需要一个@Bean类型的ResourceConfig在您注册的所有端点:

 @Component public class JerseyConfig extends ResourceConfig { public JerseyConfig() { register(Endpoint.class); } } 

文档还说明以下内容:

您也可以注册任意数量的实现ResourceConfigCustomizer的bean,以进行更高级的自定义。

所有注册的端点都应该是带有HTTP资源注释的@Component@GET等),例如

 @Component @Path("/hello") public class Endpoint { @GET public String message() { return "Hello"; } } 

由于Endpoint是Spring @Component其生命周期由Spring管理,您可以@Autowired依赖项并使用@Value注入外部配置。 默认情况下,Jersey servlet将被注册并映射到/* 您可以通过将@ApplicationPath添加到ResourceConfig来更改映射。

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

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

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

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

因此,通过上述方法,您也可以使用@Configuration注释您的config类,但这将是不必要的开销。

它们都使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 Configuration实际上是用于Spring配置的。 可以将Spring配置放在ResourceConfig子类中,但是我只是将其放在单独的配置类中,只是为了使事情分开。 请注意,配置类也是Spring Bean,所以这就是@Configuration起作用的原因。

另一方面, @Component是通用注释,它将使该类成为Spring Bean。 这就是所有示例都使用注释显示的原因,因为ResourceConfig通常并不意味着是Spring配置类,并且比上面的示例更冗长,没有使用任何注释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM