Spring中@Import和@ComponentScan在导入bean的区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

Spring中加载bean的几个注解的解析,分别从@Import和@ComponentScan两者对bean的导入进行分析


提示:以下是本篇文章正文内容,下面案例可供参考

一、@Import和@ComponentScan的相同点

先创建一个tiger类,在类中定义了一个方法lion,返回的对象也是lion的类型,并且将返回的对象封装的bean,在配置类中对这个类来进行加载,可以很直观的看到效果(此时的tiger添加了@Component注解)

 

 当tiger类是bean时,配置类能够对其进行扫描并进行加载,并会加载该类中的属性,将其类名首字母转换为小写成为其id

当换用@Import注解时,也会对该类进行加载,并且会加载该类里面的属性,只是用@Import导入类时会用其所在路径作为其id

二、@Import和@ComponentScan的不同点

同样使用这个例子(注:这个tiger类未添加@Component的相关注解)

先是用@Import注解,看这个配置类中加载的bean有哪些 ,由下图可以很直观的看到,用@Import导入这个类,配置类中具有了tiger和lion两个bean

接下来换用@ComponentScan来对这个类进行扫描,看配置类中加载了哪些bean

很直观的看到,这个配置类中并未加载这两个类

 

总结

根据上面对两个注解的相同点和不同点进行了分析,可以得知,@Import和@ComponentScan这两个注解都能实现对bean的加载,但是@Import导入类可以要求该类可以不是bean,导入时会自动将类配置成bean,并且对该类里面的属性进行解析,这样就说明了用@Import导入类时,该类中的bean也会被加载;而@ComponentScan对包进行扫描,对扫描到的bean进行加载,由上图可以看出,tiger类即里面的bean并未被加载,原因是扫描器在扫描到该类时,发现tiger类并不是一个bean,这个就会忽略这个类,不会对该类进行加载,故该类里面的bean也不会被加载;可以抽象的理解为当扫描器扫描到该类时,扫描器无法透过该类来识别类中的属性,扫描器连看都看不到类里面的bean,又怎么谈加载呢?

以上就是@Import和@ComponentScan这两个注解在对bean加载时的区别

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值