2017-06-08 111 views
1

我剛剛開始使用Spring Boot,我想實現一個ResourceConfig,並且發現了一些衝突的想法。春季啓動:Jersey ResourceConfig需要註釋?

採取以下

@Component 
public class JerseyExampleConfig extends ResourceConfig { 

上面標註有COMPONENT

@Configuration 
public class JerseyExampleConfig extends ResourceConfig { 

哪一個是正確的?

我認爲使用配置進行註釋將是正確的方式,但它似乎在示例中使用了組件。

任何想法?

有什麼區別?

+0

這很令人困惑,因爲'配置'在這裏聽起來很正確 - 但是隨Spring配置的配置與Jersey無關。 Spring認識到bean並正確註冊它(並橋接DI)。你*可以使用'Configuration',但是你可以定義一個'Bean'註解的方法來返回你的資源配置。實際上,這是做同樣的事情。 – pandaadb

回答

2

documentation建議@Component

要開始使用2.x的球衣只是包括spring-boot-starter-jersey作爲一個依賴,那麼你就需要一個@BeanResourceConfig類型,其中註冊您的所有端點:

@Component 
public class JerseyConfig extends ResourceConfig { 

    public JerseyConfig() { 
     register(Endpoint.class); 
    } 
} 

documentation還包含以下內容:

您還可以註冊任意數量的beans,實現ResourceConfigCustomizer以進行更高級的自定義。

所有註冊的端點應該是@Component s,帶有HTTP資源註釋(@GET等),例如,

@Component 
@Path("/hello") 
public class Endpoint { 

    @GET 
    public String message() { 
     return "Hello"; 
    } 
} 

由於Endpoint是春天@Component其生命週期由Spring管理,您可以@Autowired依賴關係,並與@Value注入外部配置。 Jersey servlet默認會註冊並映射到/*。您可以通過將@ApplicationPath添加到您的ResourceConfig來更改映射。

+0

對於Resource類,它是'Component'還是'Controller' - 我認爲'Controller'是正確的Spring-ish方式,但我不太確定。它達到了相同的結果(可能會增加支持以防止發生球衣並切換到REST的彈簧方式)? – pandaadb

+0

@pandaadb老實說,我從來沒有用'@ Controller'測試。但'@ Controller'是'@ Component'的專長。可以工作。 –

+1

謝謝C'assio! – Martin

1

所以,即使你不能決定使用哪種方式JerseyConfig可以確定的是在情況較好的通過閱讀他們的實際意思是:

@Configuration表示一類聲明的一個或更@Bean 方法,並且可以通過Spring容器被處理在運行時

@Component指示的帶註釋類是一個「組件」,以產生豆爲那些豆 定義和服務請求。當使用 基於註釋的配置和類路徑掃描時,這樣的 類被認爲是自動檢測的候選項。

@Configuration是薈萃使用了@Component註解,因此 @Configuration類的組件掃描

因此候選人由上面說你可以用@Configuration註解你的配置類以及但是這將是一個不必要的開銷

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配置。你可能把你的彈簧配置放在ResourceConfig的子類中,但我只是把它放在一個單獨的配置類中,只是爲了保持分離。請注意,配置類也是Spring Beans,所以這就是@Configuration工作的原因。

@Component另一方面,是一個通用的註釋,將使類Spring Bean。這就是所有示例使用註釋顯示的原因,因爲ResourceConfig通常不是Spring配置類,並且與上面的示例相比,它沒有使用任何註釋。