[英]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.