一、Springboot解析类注解原理图二、先说明一个重要问题在Springboot中注解重复是怎么解决,如果在启动类加了@SpringBootApplication和@ComponentScan,那么是使用@SpringBootApplication里面的@ComponentScan,还是启动类上的@ComponentScan,还是合并两个注解的属性后再使用呢?答案是,启动类上的@ComponentScan。SpringBoot在解析注解时,会形成一个层级关系,越在外层的优先级越高。
三、@ComponentScan的作用及使用
1.作用主要是用来扫描包。通过这个注解来搜索需要加载到容器中的Bean。
2.使用
(1)配置包路径,如是没有显示配置,那默认是启动类所在的包包路径。
(2)配置过滤器,主要是配置exclude过滤器(哪些类不要加载)和include类型过滤器(包括声明是否使用默认 的)。
(3)@ComponentScan上默认配置的exclude过滤器主要是过滤掉被当前@ComponentScan注解的类,因为已经被解析了;其次是过滤自动配置的类即在spring.factories中配置了EnableAutoConfiguration的类,且该类被@Configuration注解。
(4)include类型过滤器,主要是扫描被@Component注解的类。
默认添加的include类型过滤器
(5)递归处理(非常重要)
扫描到的类如果被@Configuration注解了,那么这个类会被递归处理,如果其被@ComponentScan注解,那么又会在该类所在的包进行扫描。