在 Spring 框架中使用 @Import 和 @ImportResource 注解有什么区别?
What is the difference between the use of @Import and @ImportResource annotations in Spring framework?
我正在学习 Spring 核心认证,我对 @import 和 @importresource[=34= 有疑问] 注释使用。
例如我有一个名为 RootConfig.java 的配置 class,这个:
@Configuration
@Import({AppConfig.class,DbConfig.class})
@ImportResource("classpath:/config/security-config.xml")
@EnableTransactionManagement
public class RootConfig {
}
所以我知道在这个例子中:
@Import({AppConfig.class,DbConfig.class})
正在导入其他 2 个配置 classes(比如将这些配置包含到我的 RootConfig.java 配置 class 所代表的主要配置中.
Ant 我的理解是:
@ImportResource("classpath:/config/security-config.xml")
正在导入 XML 文件。
所以我的疑问是:为什么存在 2 个不同的注释来完成非常相似的任务?为什么不使用单个注释来导入配置 classes 和资源(例如 xml 文件或 属性 文件?)
这只是语义上的区别还是另有原因?
@ImportResource 旨在用于以 java 为中心的配置上下文。文档说,
In applications where @Configuration classes are the primary mechanism
for configuring the container, it will still likely be necessary to
use at least some XML. In these scenarios, simply use @ImportResource
and define only as much XML as is needed. Doing so achieves a
"Java-centric" approach to configuring the container and keeps XML to
a bare minimum.
一个重要的方面是,当使用 @ImportResource XML 配置时,您可以使用 @ 覆盖以 java 为中心的配置Bean 注解。这意味着您可以覆盖配置(通过更改配置 XML)而不影响代码。这种语义为您提供了一个上下文,您可以在其中考虑使用 @ImportResource,在我看来,它是一项非常有价值的资产,因为这是对以 java 为中心的最常见的批评之一配置是需要重新编译代码。
第二个上下文提供了逐渐从以 XML 为中心的配置转移到以 java 为中心的配置的方法。
@Import
表示要导入一个或多个@Configuration
类。用于导入 Java 基于代码的配置。例如
@Configuration
@Import({ DataSourceConfig.class, TransactionConfig.class })
public class AppConfig { ... }
@ImportResource
表示一个或多个包含要导入的 bean 定义的资源。用于导入基于 XML 的配置或其他非 @Configuration
bean 定义资源。例如
@Configuration
@ImportResource({"classpath:spring-security.xml"})
public class SecurityConfig { ... }
更多内容见@Configuration
class-centric use of XML with @ImportResource
。
我正在学习 Spring 核心认证,我对 @import 和 @importresource[=34= 有疑问] 注释使用。
例如我有一个名为 RootConfig.java 的配置 class,这个:
@Configuration
@Import({AppConfig.class,DbConfig.class})
@ImportResource("classpath:/config/security-config.xml")
@EnableTransactionManagement
public class RootConfig {
}
所以我知道在这个例子中:
@Import({AppConfig.class,DbConfig.class})
正在导入其他 2 个配置 classes(比如将这些配置包含到我的 RootConfig.java 配置 class 所代表的主要配置中.
Ant 我的理解是:
@ImportResource("classpath:/config/security-config.xml")
正在导入 XML 文件。
所以我的疑问是:为什么存在 2 个不同的注释来完成非常相似的任务?为什么不使用单个注释来导入配置 classes 和资源(例如 xml 文件或 属性 文件?)
这只是语义上的区别还是另有原因?
@ImportResource 旨在用于以 java 为中心的配置上下文。文档说,
In applications where @Configuration classes are the primary mechanism for configuring the container, it will still likely be necessary to use at least some XML. In these scenarios, simply use @ImportResource and define only as much XML as is needed. Doing so achieves a "Java-centric" approach to configuring the container and keeps XML to a bare minimum.
一个重要的方面是,当使用 @ImportResource XML 配置时,您可以使用 @ 覆盖以 java 为中心的配置Bean 注解。这意味着您可以覆盖配置(通过更改配置 XML)而不影响代码。这种语义为您提供了一个上下文,您可以在其中考虑使用 @ImportResource,在我看来,它是一项非常有价值的资产,因为这是对以 java 为中心的最常见的批评之一配置是需要重新编译代码。
第二个上下文提供了逐渐从以 XML 为中心的配置转移到以 java 为中心的配置的方法。
@Import
表示要导入一个或多个
@Configuration
类。用于导入 Java 基于代码的配置。例如@Configuration @Import({ DataSourceConfig.class, TransactionConfig.class }) public class AppConfig { ... }
@ImportResource
表示一个或多个包含要导入的 bean 定义的资源。用于导入基于 XML 的配置或其他非
@Configuration
bean 定义资源。例如@Configuration @ImportResource({"classpath:spring-security.xml"}) public class SecurityConfig { ... }
更多内容见
@Configuration
class-centric use of XML with@ImportResource
。