在使用OpenFeign时,需要定义一个或多个接口来表示要调用的远程服务的API。OpenFeign通过扫描这些接口上的注解来创建相应的代理类,以实现调用远程服务的功能。
在Spring Boot应用中,OpenFeign的自动配置类FeignAutoConfiguration中包含了用于扫描Feign客户端接口的FeignClientsRegistrar类。该类使用了Spring的ClassPathScanningCandidateComponentProvider来扫描指定包下的所有接口,并检查这些接口是否标记了@FeignClient注解。如果是,则使用FeignClientFactoryBean类创建对应的代理类。
ClassPathScanningCandidateComponentProvider会扫描应用程序的类路径,搜索指定包及其子包下的所有类,然后将它们转换为Spring的BeanDefinition对象,最终交给Spring容器进行管理。在扫描期间,ClassPathScanningCandidateComponentProvider会检查每个类是否符合条件,这些条件可以通过其构造函数中的参数来指定。
FeignClientsRegistrar在扫描时会使用@FeignClientScan注解上指定的包路径来限定扫描的范围,如果未指定,则默认扫描启动类所在的包及其子包。
总之,OpenFeign的包扫描原理就是利用Spring的ClassPathScanningCandidateComponentProvider来扫描指定包下的所有接口,并使用FeignClientFactoryBean类创建对应的代理类。