• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
xzyash
帮助2

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

文章目录


前言

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
系列文章
更多 icon
同类精品
更多 icon
继续加载