[英]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旨在用於以Java為中心的配置上下文。 文檔說,
在@Configuration類是配置容器的主要機制的應用程序中,仍然可能需要使用至少一些XML。 在這些場景中,只需使用@ImportResource並僅根據需要定義盡可能多的XML。 這樣做可以實現“以Java為中心”的方法來配置容器並將XML保持在最低限度。
一個重要的方面是,當使用@ImportResource XML配置時,您可以使用@Bean批注覆蓋以Java為中心的配置。 這意味着您可以覆蓋配置(通過更改配置XML)而不會影響代碼。 這個語義為您提供了一個可以考慮使用@ImportResource的上下文 ,並且在我看來它是一個非常有價值的資產,因為對於以Java為中心的配置最常見的批評之一是它需要重新編譯代碼。
第二個上下文提供了逐步從XML中心遷移到以Java為中心的配置的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.