什么样的类可以被AutoWired

我知道有配置类所在包及子包下有@Component @Repository @Service @Controller的可以被扫描到,第三方的包可以通过写配置类@Bean的方式被扫描到,那为什么有的类大家是直接@AutoWired,比如我看项目中用到的JavaMailSender就是直接依赖注入的。他为什么已经被Spring容器管理了呀

@AutoWired
private JavaMailSender javaMailSender
全部评论
我说的不一定准啊,只是自己读源码理解的,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等等都处理了
2 回复 分享
发布于 2020-02-08 21:29

相关推荐

2024-12-30 22:31
吉首大学 Web前端
工字钢写代码:改成吉林就OK了
点赞 评论 收藏
分享
2024-12-02 22:30
西安理工大学 Java
M_bao:简历排版换一下吧,第二个项目换了吧,咱门双非学历本来就不行还用这种项目太掉分了,300沟通一个要简历你打招呼也有问题。
点赞 评论 收藏
分享
评论
点赞
4
分享
牛客网
牛客企业服务