4 java spring annotations spring-mvc
我正在攻读Spring Core认证,我怀疑与@import和@importresource注释的使用有关.
例如,我有一个名为RootConfig.java的配置类,这个:
@Configuration
@Import({AppConfig.class,DbConfig.class})
@ImportResource("classpath:/config/security-config.xml")
@EnableTransactionManagement
public class RootConfig {
}
Run Code Online (Sandbox Code Playgroud)
所以我知道在这个例子中:
@Import({AppConfig.class,DbConfig.class})
Run Code Online (Sandbox Code Playgroud)
正在导入另外两个配置类(类似于将这些配置包含在我的RootConfig.java配置类所代表的主配置中).
Ant我明白了:
@ImportResource("classpath:/config/security-config.xml")
Run Code Online (Sandbox Code Playgroud)
正在导入XML文件.
所以我的疑问是:为什么存在2个不同的注释,它们执行非常相似的任务?为什么不使用单个注释来导入配置类和资源(例如xml文件或属性文件?)
这只是一个语义差异还是还有其他什么?
@Import表示@Configuration要导入的一个或多个类.用于导入基于Java代码的配置.例如
@Configuration
@Import({ DataSourceConfig.class, TransactionConfig.class })
public class AppConfig { ... }
Run Code Online (Sandbox Code Playgroud)
请参阅使用@Import注释.
@ImportResource指示包含要导入的bean定义的一个或多个资源.用于导入基于XML的配置或其他非@Configurationbean定义资源.例如
@Configuration
@ImportResource({"classpath:spring-security.xml"})
public class SecurityConfig { ... }
Run Code Online (Sandbox Code Playgroud)
@ImportResource旨在在以 java 为中心的配置上下文中使用。文档说,
在 @Configuration 类是配置容器的主要机制的应用程序中,仍然可能需要至少使用一些 XML。在这些场景中,只需使用 @ImportResource 并仅定义所需数量的 XML。这样做可以实现“以 Java 为中心”的方法来配置容器,并将 XML 保持在最低限度。
一个重要的方面是,当使用@ImportResource XML 配置时,您可以使用以下命令覆盖以 java 为中心的配置: XML 配置时,您可以使用@Bean。这意味着您可以覆盖配置(通过更改配置 XML)而不影响代码。这种语义为您提供了一个可以考虑使用@ImportResource 的上下文,在我看来,这是一项非常有价值的资产,因为对以 java 为中心的配置最常见的批评之一是它需要重新编译代码。
第二个上下文是提供逐渐从以 XML 为中心的配置转向以 java 为中心的配置的方法。
| 归档时间: |
|
| 查看次数: |
9965 次 |
| 最近记录: |