@ComponentScan注解的实现,Spring扫描包的过程

这篇具有很好参考价值的文章主要介绍了@ComponentScan注解的实现,Spring扫描包的过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相信接触过spring做开发的小伙伴们一定使用过@ComponentScan注解

@ComponentScan("com.wangm.lifecycle")
public class AppConfig {

}

@ComponentScan指定basePackage,将包下的类按照一定规则注册成Bean。
但是这个注解的其他参数,比如excludeFilters、includeFilters以及底层扫描的实现你有没有了解过?

1. 默认的扫描规则

当我们使用@ComponentScan没有指定excludeFilters、includeFilters时,basePackage下哪些类会被扫描成Bean呢?
相信大家一定知道是携带了@Component,@Service等等注解的类,那么这个默认的规则在spring的源码中是如何实现的呢?
@ComponentScan扫描包主要是通过ClassPathBeanDefinitionScanner这个类来实现的;
在构造方法ClassPathBeanDefinitionScanner#ClassPathBeanDefinitionScanner()
@ComponentScan注解的实现,Spring扫描包的过程
指定了默认的过滤规则->
@ComponentScan注解的实现,Spring扫描包的过程
默认的规则:

  • 携带@Component注解
  • Java满足指定版本是,携带@ManagedBean注解
  • Java满足指定版本是,携带@Named注解

2.扫描的实现

我们再来看ClassPathBeanDefinitionScanner类的关键方法doScan()
@ComponentScan注解的实现,Spring扫描包的过程
doScan()方法的核心是scanCandidateComponents方法
@ComponentScan注解的实现,Spring扫描包的过程

我们点进isCandidateComponent方法接着看
@ComponentScan注解的实现,Spring扫描包的过程文章来源地址https://www.toymoban.com/news/detail-856729.html

  • 第一个判断:如果满足排除条件,则不生成Bean,这个比较好理解
  • 第二个判断:如果满足包含条件,并没有直接返回true,而是还要满足isConditionMatch
    isConditionMatch方法就是@Conditional注解的实现
    @ComponentScan注解的实现,Spring扫描包的过程

到了这里,关于@ComponentScan注解的实现,Spring扫描包的过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot—@ComponentScan注解过滤排除不加载某个类的三种方法

    在引用jar包的依赖同时,经常遇到有包引用冲突问题。一般我们的做法是在Pom文件中的dependency节点下添加exclusions配置,排除特定的包。 这样按照包做的排除范围是比较大的,现在我们想只排除掉某个特定的类,这时我们怎么操作呢? 方法一:pom中配置排除特定包 缺点:排

    2024年02月15日
    浏览(43)
  • java:从spring-core移植的注解(annotation)扫描工具模组common-annotutils(适用JDK 1.7)

    spring-core的部件组装基本原理是基于注解(annotation),通过扫描类、方法、成员上定义的注解来决定组装逻辑。 spring-core将注解扫描框架封装为一个工具类: org.springframework.core.annotation.AnnotationUtils ,使用这个工具类就可以从一个复杂类型或方法中获取指定的注解信息,大概就是这

    2024年04月14日
    浏览(33)
  • Spring的注解开发-注解方式整合MyBatis代码实现

    之前使用xml方式整合了MyBatis,文章导航:Spring整合第三方框架-MyBatis整合Spring实现-CSDN博客 现在使用注解的方式无非是就是将xml标签替换为注解,将xml配置文件替换为配置类而已。 非自定义配置类                 与数据库建立连接的同时,扫描指定的mapper接口,实现实现

    2024年02月07日
    浏览(53)
  • 注解实现(基于Spring AOP)

    切入点表达式 Spring AOP 支持的切入点主要有以下几种: execution:用于匹配方法执行的连接点。这是最常用的切入点指示器。你可以指定具体的方法,或者类来匹配。 例如: execution(* com.example.service.*.*(..)) ,这个表达式表示匹配 com.example.service 包下的所有类的所有方法。 wit

    2024年02月16日
    浏览(42)
  • Spring注解是如何实现的?

    1、 Java注解(Annotations),首次出现在Java 5中,是一种用于类、方法、变量、参数和Java包的特殊标记。在此之前,Java开发者通常依赖于文档、注释或命名约定来传达某些信息,这些方式并不是语言结构的一部分,因此不能被编译器或运行时环境所理解和利用。 本文已收录于

    2024年01月22日
    浏览(26)
  • javaee spring aop 注解实现

    2024年02月09日
    浏览(43)
  • Spring 多数据源方法级别注解实现

    Spring框架提供了多种数据源管理方式,其中多数据源管理是其中之一。多数据源管理允许应用程序使用多个数据源,而不是只使用一个数据源,从而提高了应用程序的灵活性和可靠性。 多数据源管理的主要目的是让应用程序能够在不同的数据库之间切换,以满足不同的业务需

    2024年02月15日
    浏览(59)
  • 【Spring全家桶系列】Spring中的事务管理(基于注解完成实现)

    ⭐️ 前面的话 ⭐️ 本文已经收录到《Spring框架全家桶系列》专栏,本文将介绍Spring中的事务管理,事务的概念与作用,以及Spring事务的属性和传播机制。 📒博客主页:未见花闻的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文由 未见花闻 原创, CSDN 首发! 📆首

    2024年02月07日
    浏览(43)
  • 【Spring】使用自定义注解方式实现AOP鉴权

    AOP,是一种面向切面编程,可以通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 在软件开发中,鉴权(Authentication)是一项非常重要的安全措施,用于验证用户身份和权限。在应用程序中,我们通常会使用AOP(Aspect-Oriented Programming)来实现鉴权功能

    2024年02月11日
    浏览(46)
  • javaee spring 用注解的方式实现ioc

    spring核心依赖 spring配置文件

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包