美文网首页
Spring Boot 自动装配原理

Spring Boot 自动装配原理

作者: kk爱自由 | 来源:发表于2022-10-21 23:39 被阅读0次

    Spring boot 自动装配实现机制

    • 一种猜测
      使用了 spring 的 beanFactoryPostProcessors 或者 xxxxware ,在spring 启动阶段通过反射扫描注解对 bean 进行装配 (这是 bean 的实例化过程)

    • SpringBoot 自动装配原理
      主要借助@EnableAutoConfiguration 和@ComponentScan 注解
      springboot 提供了很多 starter 来帮助自动装配某一具体功能的 jar,借助@EnableAutoConfiguration 注解实现spring bean 的自动装配。

    • @EnableAutoConfiguration
      使用@Import 引入AutoConfigurationImportSelector, 在该 selector 中获取所有自动装配类名,然后读取 META-INF/spring.factories加载自动配置类 (新版本的 springboot 读取的配置文件有改动),找到里面EnableAutoConfiguration 配置项,按需要根据所需配置文件中的配置项(例如jdbc 需要的 url,driver,username 等) 完成 bean 的装配
      ConfigurationClassPostProcessor#processConfigBeanDefinitions -》 ConfigurationClassParser#processImports -》 AutoConfigurationImportSelector#selectImports

    • 一个疑问 - 有些bean 看起来并没有被component标记,但是仍然可以使用autowired注入
      例如:JavaMailSender 本身并没有被 component 标记,怎么可以使用 autowired 注入
      答案在以下截图


      image.png
      image.png
    • @Import 注解的三种用法

      1. 引入其他 @Configuration 类,类似 xml 中配置的<import>,有利于划分不同的配置,满足配置的单一职责原则。

    @Configuration 的作用

    • 允许在 Spring 上下文中注册额外的 bean 或导入其他配置类
    • 配合 @ConfigurationProperties 读取配置信息
    1. 引入的其他 configuration 类中定义的@Bean 可以交给 Spring 管理,即可以使用 autowired 注入 - JavaMailSender 实例化就是用这种方式

    TODO 直接引入一个 bean 到spring IOC容器中(初始化一个 bean)
    TODO 指定实现ImportSelector的类,用于个性化加载- EnableAutoConfiguration 的实现方式

    Autowired 和 Component 注解

    @Autowired 是依赖注入的注解,意思是把已经交给 spring 管理的 bean 注入到当前 bean 中
    @Component 是标记当前 bean 需要交给 spring 管理(自动装配)

    Autowired 注解生效的原理 - AutowiredAnnotationBeanPostProcessor

    其他注解

    • @ControllerAdvice :注解定义全局异常处理类
    • @ExceptionHandler :注解声明异常处理方法

    Spring bean 加载顺序

    :static block > constructor > @PostConstruct > CommandLineRunner / ApplicationRunner

    相关文章

      网友评论

          本文标题:Spring Boot 自动装配原理

          本文链接:https://www.haomeiwen.com/subject/menbzrtx.html