• 2. Spring源码篇之Reader与Scanner


    简介

    通俗的理解,spring其实是帮我们创建了类实例对象,称为spring bean,并且统一管理了一个个的bean,那么spring怎么去注册bean呢,在bean很多的情况下又该如何注册

    在spring的内部有两个类一个是 AnnotatedBeanDefinitionReader 一个是 ClassPathBeanDefinitionScanner

    AnnotatedBeanDefinitionReader 给我们提供了注册Bean的功能

    ClassPathBeanDefinitionScanner 提供了扫描某一路径下所有bean的功能

    在AnnotationConfigApplicationContext的构造器中就会实例化这两个bean

    public AnnotationConfigApplicationContext() {
        this.reader = new AnnotatedBeanDefinitionReader(this);
        this.scanner = new ClassPathBeanDefinitionScanner(this);
    }
    
    • 1
    • 2
    • 3
    • 4

    注册bean

    从上面的分析,其实context具备注册bean的功能,那么我们其实可以编程式的注册一个bean也是可以,例如

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.register(UserBean.class);
        context.refresh();
        UserBean bean = context.getBean(UserBean.class);
        System.out.println(bean);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出

    com.shura.beans.UserBean@123a439b

    扫描

    从上面分析,context还具备扫描的功能,可以指定路径扫描bean注册,例如

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.refresh();
        context.scan("com.shura.beans");
        UserBean bean = context.getBean(UserBean.class);
        System.out.println(bean);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出

    com.shura.beans.UserBean@626b2d4a

    总结

    spring就是利用了Reader以及Scanner去知道要实例化注册哪些Bean的,在我们的编程中往往是通过ComponentScan注解来做到扫描注册bean,下一篇我们将介绍spring通过ComponentScan注册bean的源码


    欢迎关注,学习不迷路!

  • 相关阅读:
    机器学习:什么是机器学习
    Mybatis数据源
    Chapter006-FPGA学习之LCD显示
    基于JavaSwing开发资源管理器(系统文件操作 增删改查文件) 课程设计 大作业
    卷积神经网络(CNN)
    java计算机毕业设计考勤系统设计源码+mysql数据库+系统+lw文档+部署
    【git】git配置自带的查看分支log图
    Python第三方cv2库介绍
    【CentOS7】安装docker
    光伏电池建模及温度光照的影响曲线MATLAB仿真
  • 原文地址:https://blog.csdn.net/weixin_44412085/article/details/134422918