天天看點

Spring Boot 之配置導入,強大到不行!

Spring Boot 之配置導入,強大到不行!

我們可以把相關的配置獨立出來,放到多個 @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  配置檔案,都可以輕松內建。