示例代码:
@SpringBootApplication(scanBasePackages="com.test.**",
excludeName={"com.test.ms.boot","com.test.ms.config"})
@ImportResource(locations="classpath*:/spring-context-**.xml")
@ComponentScan
@EnableScheduling
public class Application {
}
spring 在获取注解信息时首先搜索最外层注解,如果找到对应的注解就直接返回,否则获取外层注解内的嵌套注解信息。
如上代码,Application类最外层注解有4个分别是SpringBootApplication、ImportResource、ComponentScan、EnableScheduling。Spring在获取ComponentScan的注解信息时首先从最外层注解中查找,有就直接返回。由于Application类最外层包含ComponentScan注解,spring在扫描时会以外部的ComponentScan注解信息为配置进行扫描而忽略掉SpringBootApplication内的扫描配置。为了避免这种冲突需要将自己的ComponentScan注解放到ComponentScans内使用。