Java 在Spring框架中使用@Import和@ImportResource注释有什么区别?
我正在学习Spring Core认证,我对@import和@importresource注释的使用有疑问 例如,我有一个名为RootConfig.java的配置类,这个:Java 在Spring框架中使用@Import和@ImportResource注释有什么区别?,java,spring,spring-mvc,annotations,Java,Spring,Spring Mvc,Annotations,我正在学习Spring Core认证,我对@import和@importresource注释的使用有疑问 例如,我有一个名为RootConfig.java的配置类,这个: @Configuration @Import({AppConfig.class,DbConfig.class}) @ImportResource("classpath:/config/security-config.xml") @EnableTransactionManagement public class RootConf
@Configuration
@Import({AppConfig.class,DbConfig.class})
@ImportResource("classpath:/config/security-config.xml")
@EnableTransactionManagement
public class RootConfig {
}
所以我知道在这个例子中:
@Import({AppConfig.class,DbConfig.class})
正在导入另外两个配置类(类似于将这些配置包含到由myRootConfig.java配置类表示的主配置中)
据我所知:
@ImportResource("classpath:/config/security-config.xml")
正在导入XML文件
所以我的疑问是:为什么存在两个不同的注释来完成非常相似的任务?为什么不使用一个注释来导入配置类和资源(例如xml文件或属性文件?)
这只是语义上的区别,或者还有其他区别?@ImportResource旨在用于以java为中心的配置上下文。文档说
在@Configuration类是主要机制的应用程序中
对于配置容器,可能仍然需要
至少使用一些XML。在这些场景中,只需使用@ImportResource即可
并且只定义所需数量的XML
“以Java为中心”的方法来配置容器并保持XML
最低限度
一个重要方面是,当使用@ImportResource XML配置时,可以使用@Bean注释覆盖以java为中心的配置不影响代码。这个语义给了你一个上下文,你可以考虑使用@ java资源,它在我看来是一个非常有价值的资产。
第二个上下文提供了从以XML为中心逐渐过渡到以java为中心的配置的方法。-
指示要导入的一个或多个
类。用于导入基于Java代码的配置。例如@Configuration
更多信息请参阅@Configuration @Import({ DataSourceConfig.class, TransactionConfig.class }) public class AppConfig { ... }
-
指示包含要导入的bean定义的一个或多个资源。用于导入基于XML的配置或其他非
bean定义资源。例如@configuration
更多信息请参阅@Configuration @ImportResource({"classpath:spring-security.xml"}) public class SecurityConfig { ... }