簡體   English   中英

在Spring框架中使用@Import和@ImportResource注釋有什么區別?

[英]What is the difference between the use of @Import and @ImportResource annotations in Spring framework?

我正在攻讀Spring Core認證,我懷疑與@import@importresource注釋的使用有關。

例如,我有一個名為RootConfig.java的配置類,這個:

@Configuration
@Import({AppConfig.class,DbConfig.class})
@ImportResource("classpath:/config/security-config.xml")
@EnableTransactionManagement
public class RootConfig {

}

所以我知道在這個例子中:

@Import({AppConfig.class,DbConfig.class})

正在導入另外兩個配置類(類似於將這些配置包含在我的RootConfig.java配置類所代表的主配置中)。

Ant我明白了:

@ImportResource("classpath:/config/security-config.xml")

正在導入XML文件。

所以我的疑問是:為什么存在2個不同的注釋,它們執行非常相似的任務? 為什么不使用單個注釋來導入配置類和資源(例如xml文件或屬性文件?)

這只是一個語義差異還是還有其他什么?

  • @Import

    表示要導入的一個或多個@Configuration類。 用於導入基於Java代碼的配置。 例如

     @Configuration @Import({ DataSourceConfig.class, TransactionConfig.class }) public class AppConfig { ... } 

    有關使用@Import注釋的詳細信息,請參閱。

  • @ImportResource

    指示包含要導入的bean定義的一個或多個資源。 用於導入基於XML的配置或其他非@Configuration bean定義資源。 例如

     @Configuration @ImportResource({"classpath:spring-security.xml"}) public class SecurityConfig { ... } 

    有關@ImportResource @Configuration類為中心使用XML的@ImportResource

@ImportResource旨在用於以Java為中心的配置上下文。 文檔說,

在@Configuration類是配置容器的主要機制的應用程序中,仍然可能需要使用至少一些XML。 在這些場景中,只需使用@ImportResource並僅根據需要定義盡可能多的XML。 這樣做可以實現“以Java為中心”的方法來配置容器並將XML保持在最低限度。

一個重要的方面是,當使用@ImportResource XML配置時,您可以使用@Bean批注覆蓋以Java為中心的配置。 這意味着您可以覆蓋配置(通過更改配置XML)而不會影響代碼。 這個語義為您提供了一個可以考慮使用@ImportResource的上下文 ,並且在我看來它是一個非常有價值的資產,因為對於以Java為中心的配置最常見的批評之一是它需要重新編譯代碼。

第二個上下文提供了逐步從XML中心遷移到以Java為中心的配置的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM