SpringBoot的自动装配

28 篇文章 0 订阅
2 篇文章 0 订阅
SpringBoot的自动装配:

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

SpringBoot项目无需各种配置文件,一个main方法,就能把项目启动起来。那么我们看看SpringBoot是如何进行自动配置和启动的。

SpringBoot所具备的特征有:

(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

(2)内嵌Tomcat或Jetty等Servlet容器;

(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;

(4)尽可能自动配置Spring容器;

(5)提供准备好的特性,如指标、健康检查和外部化配置;

(6)绝对没有代码生成,不需要XML配置。

对于spring框架,我们接触得比较多的应该是spring mvc、和spring。而spring的核心在于IOC(控制反转对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系)和DI(依赖注入IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。

springboot框架是为了能够帮助使用spring框架的开发者快速高效的构建一个基于spirng框架以及spring生态体系的应用解决方案。它是对“约定优于配置”这个理念下的一个最佳实践。因此它是一个服务于框架的框架,服务的范围是简化配置文件。

在日常的开发过程中Spring Boot自动装配的特性给我们开发减少了很多重复性的工作,具体时如果实现自动装配的呢?

启动类上的注解是@SpringBootApplication

然后里面除其他的基本注解就是有以下三个重要的注解:
在这里插入图片描述

  1. @SpringBootConfiguration:java的配置类,

  2. @EnableAutoConfiguration:这个注解表明启动自动装配,里面包含两个比较重要的注解@AutoConfigurationPackage和@Import。

    1. @AutoConfigurationPackage此注解类似@ComponentScan扫描包,但扫描的是@MapperSacn、@Entity等第三方注解
      在这里插入图片描述

    2. @Import注解:里面导入了一个配置类AutoConfigurationImportSelector.class,实现类AutoConfigurationImportSelector实现ImportSelector有一个抽象方法selectImports,调用了getAutoConfigurationEntry方法,返回了String[]数组,就是需要去指定装配到IOC的类,调用getCandidateConfigurations()方法获取候选装载的类,找的是META-INF/spring.factories文件的配置,

      1. spring.factories文件是一组组的key=value的形式,包含了key为EnableAutoConfiguration的全类名,value是一个AutoConfiguration类名的列表,以逗号分隔。
    3. 对准备装载的类进行加工(按需加载)

      1. 会移除重复的配置,

      2. 移除排除的配置,

        类似**@SpringBootApplication(exclude = RedisAutoConfiguration.class)**

      3. 再进行filter过滤配置,返回最终需要配置的对象

        从META-INF/spring-autoconfigure-metadata.properties中加载自动装配的条件元数据,简单来说就是只有满足条件的Bean才能够进行装配

  3. @ComponentScan:它的作用是扫描当前包及其子包,将@Controller/@Service/@Component/@Repository等注解加载到IOC容器中;(这也是为什么有时我们把启动类放错位置,而导致无法扫描到某些包的原因)

@indexed注解:

加速索引,整一个索引表,减少IO
在这里插入图片描述

@import注解
  • 静态注入进去

  • 导入类型实现importSelector接口,不会注入到容器里面 会将对应接口的方法的信息进行返回 ,可以自定义条件进行灵活的返回, 相比Import好
    在这里插入图片描述

    实现的抽象类selectImport方法:可以自定义去返回类型
    在这里插入图片描述

    主要的实现在getAutoConfigurationEntry方法里面
    在这里插入图片描述

    加载类名称
    在这里插入图片描述

  • 实现importBeanDefinitionRegister接口,自己去注册

    在ImportBeanDefinitionRegistrar接口中,有一个registerBeanDefinitions()方法,通过该方法,我们可以向Spring容器中注册bean实例。

    Spring官方在动态注册bean时,大部分套路其实是使用ImportBeanDefinitionRegistrar接口。

    所有实现了该接口的类都会被ConfigurationClassPostProcessor处理,ConfigurationClassPostProcessor实现了BeanFactoryPostProcessor接口,所以ImportBeanDefinitionRegistrar中动态注册的bean是优先于依赖其的bean初始化的,也能被aop、validator等机制处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值