簡體   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