繁体   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