Spring boot里类的扫描

spring boot里,扫描的class对象是用注解@ComponentScan(未指定的情况下默认是main函数所在package)来指定的。

然后通过类ComponentScanAnnotationParser来读取这些packages,交给ClassPathScanningCandidateComponentProvider来扫描这些类,找到package下所有类的活默认是由PathMatchingResourcePatternResolver来完成的,其实最终还是有jdk里ClassLoader类的getResources方法来做。

这个getResources方法有个path参数,就是指定目录的,如果为空字符或者".",找的是classpath的跟路径,如果指定了路径名,会寻找classpath的路径还有jar文件。

PathMatchingResourcePatternResolver就是通过去递归classpath路径来找所有类的,而对于jar,找到类所属jar文件后,用JarFile类便可以读取文件里所有的类。

 

对于第三方的包,spring boot是不会主动去扫描的,如果第三方包里有想向spring注册的bean的话,在META-INF目录下放置一个spring.factories的文件,用org.springframework.boot.autoconfigure.EnableAutoConfiguration来指定一个配置类就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值