
我們可以把相關的配置獨立出來,放到多個 @Configuration 中,如以下參考:
MainConfiguration:項目主要配置
DataSoureceConfiguration:資料源配置
RedisConfiguration:Redis配置
MongoDBConfiguration:MongoDB配置
這時候
@Import
注解就能派上用場了,來看下它的源碼:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
/**
* {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
* or regular component classes to import.
*/
Class<?>[] value();
}
可以導入這三類注冊檔案:
- Configuration
- ImportSelector
- ImportBeanDefinitionRegistrar
第一個已經講過了,其他兩個後面會講,關注Java技術棧微信公衆号,擷取第一時間推送。
先來看一個
@Import
示例,直接導入其他配置檔案:
@Configuration
@Import({ RedisConfiguration.class })
public class MainConfiguration {
// ...
}
當然,如果這些配置檔案都在類掃描路徑下,不用
@Import
導入注解,直接用
@ComponentScan
也能搞定,這個預設的
@SpringBootApplication
注解就包含了,不需要再重複加。
再者,
@Enable*
注解也能派上用場:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(RedisConfiguration.class)
public @interface EnableRedis {
}
那麼問題來了,老項目想用 Spring Boot 架構,但還有大量的 XML 配置檔案,很難遷移到
@Configuration
配置檔案裡面來,怎麼處理?
棧長繼續給你支招!
答案就是:
@ImportResource
注解,來看下它的源碼:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface ImportResource {
@AliasFor("locations")
String[] value() default {};
@AliasFor("value")
String[] locations() default {};
Class<? extends BeanDefinitionReader> reader() default BeanDefinitionReader.class;
}
@ImportResource
可以指定要導入的 XML 配置檔案的路徑,還能指定自定義的
BeanDefinitionReader
。
來一個示例,導入一個類路徑下的 XML 配置檔案:
@Configuration
@ImportResource("classpath:config/spring-mvc.xml")
public class MainConfiguration {
// ...
}
擷取所有 Spring Boot 示例代碼,請關注微信公衆号 "Java技術棧" 在背景回複關鍵字:bootcode。
通過本文的介紹,可以看出來 Spring Boot 現在對原有的 Spring MVC 傳統項目是支援的非常好的,不管是 Servlet,還是 XML 配置檔案,都可以輕松內建。