注:本文是对前面关于Spring配置的一个总结。
假如现在有一个Java配置类(非主配置类),或者有一个XML配置文件(非主配置文件),要想让Spring去加载该配置,在不同的情况下,应该怎么做呢?
加载一个Java配置类(非主配置类)
Spring程序
主配置是XML配置文件
方法1
显式指定Java配置类:
<context:annotation-config/>
<bean class="config.MyConfig3"/>
方法2
设置包自动扫描:
<context:component-scan base-package="xxx"/>
主配置是Java配置类
方法1
显式指定Java配置类:
@Import({MyConfig3.class})
方法2
设置包自动扫描:
@ComponentScan(basePackages = {"pojo"})
SpringBoot程序
SpringBoot的入口是Java配置(即 @SpringBootApplication
所修饰的类)。
方法1
在主配置类上显式指定Java配置类:
@Import({MyConfig3.class})
方法2
在主配置类上设置包自动扫描:
@ComponentScan(basePackages = {"xxx"})
方法3
在主配置上添加 scanBasePackages
属性,设置包自动扫描:
@SpringBootApplication(scanBasePackages = {"xxx"})
方法4
不设置 @ComponentScan
,也不为 @SpringBootApplication
添加 scanBasePackages
属性,而是把配置类放到主配置类所在的包或其子包下面,即默认的包扫描路径。
注:无论有没有 @Import
注解(比如显式import了一个其它路径上的Java配置类),都不影响默认的包扫描路径。
加载一个XML配置(非主配置文件)
Spring程序
Spring入口是XML配置
方法1
显式指定XML配置文件:
<import resource="classpath:xxx.xml" />
<import resource="classpath:yyy.xml" />
Spring入口是Java配置
方法1
显式指定XML配置文件:
@ImportResource("classpath:/xxx.xml")
SpringBoot程序
SpringBoot的入口是Java配置(即 @SpringBootApplication
所修饰的类)。
方法1
在主配置类上显式指定XML配置文件:
@ImportResource("classpath:/xxx.xml")