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,又怎么谈加载呢?
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfkjaab
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24