风尽起长歌 level
获赞
116
粉丝
12
关注
18
看过 TA
65
西安电子科技大学
2021
Java
IP属地:未知
暂未填写个人简介
私信
关注
2020-08-20 09:24
已编辑
西安电子科技大学 Java
0 点赞 评论 收藏
分享
2020-02-08 20:04
已编辑
西安电子科技大学 Java
我知道有配置类所在包及子包下有@Component @Repository @Service @Controller的可以被扫描到,第三方的包可以通过写配置类@Bean的方式被扫描到,那为什么有的类大家是直接@AutoWired,比如我看项目中用到的JavaMailSender就是直接依赖注入的。他为什么已经被Spring容器管理了呀 @AutoWired private JavaMailSender javaMailSender
blankchn:我说的不一定准啊,只是自己读源码理解的,spring boot会扫描@Configuration注解,在对这个注解进行处理的同时,还会处理@ComponentScan,你可以看看这个注解的处理流程(好想在ConfigurationClassParser),这个会扫描所有的@Component (因为@service 、@Repository、@Control 都是基于@Component ),所以会把这些全部放到BeanDefinitionRegistry中,同时处理@Configuration 时,还会处理ImportSelector,AutoConfigurationImportSelector类就是这个类,并且还是DeferredImportSelector,这个会延迟处理,处理的时候就是把selectImports选出来的类(标注在spring.factories中)重新走前面提到的流程(也是按照@Configuration 处理的),这样递归的处理流程下来,所有你引入包里面在spring.factories中的配置类全部导入了,并且上面@Bean,@ImportSelector,@ComponentScan,@Compnent,@ImportResource,@ImportProperty等等都处理了
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务