[英]Spring Boot is not setting the @Value property in Jersey's ResourceConfig class
[英]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.