Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring框架中使用@Import和@ImportResource注释有什么区别?_Java_Spring_Spring Mvc_Annotations - Fatal编程技术网

Java 在Spring框架中使用@Import和@ImportResource注释有什么区别?

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

我正在学习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})
正在导入另外两个配置类(类似于将这些配置包含到由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为中心的配置的方法。

  • 指示要导入的一个或多个
    @Configuration
    类。用于导入基于Java代码的配置。例如

    @Configuration
    @Import({ DataSourceConfig.class, TransactionConfig.class })
    public class AppConfig { ... }
    
    更多信息请参阅

  • 指示包含要导入的bean定义的一个或多个资源。用于导入基于XML的配置或其他非
    @configuration
    bean定义资源。例如

    @Configuration
    @ImportResource({"classpath:spring-security.xml"})
    public class SecurityConfig { ... }
    
    更多信息请参阅


Tnx,完美的解释。现在我明白了:-)