初窥源码——Spring是这样来自动装配的

前言

        SpringBoot是Java后端开发知识体系中的一个重要部分,相信许多跟荔枝一样正在学的或者是学过了的小伙伴们提起SpringBoot,第一反应就是它的自动装配原理。在这篇文章中荔枝将会简单从自己所了解的角度来梳理一下SpringBoot的自动装配原理,从源码的角度来分析。在写这篇文章的时候,荔枝主要是对自己来做的梳理,因此默认的口吻是以对于SpringBoot有一定的了解并上手做过项目的自己来写的,希望对大家有帮助~


文章目录

前言

一、原理初探

1.1 @SpringBootApplication

1.1.1 @SpringBootConfiguration

1.1.2 @EnableAutoConfiguration

1.1.3 配置文件与配置类属性properties之间存在关联 

1.2 run()

二、为什么需要在pom.xml中导入start才能生效

三、SpringBootApplication的启动流程

总结


一、原理初探

        在一开始学习SpringBoot项目或者是在看面试题的时候,荔枝知道SpringBoot是通过自动导入springboot核心包autoconfiguration下的META-INF中的spring.factories配置来实现自动装配的。但是具体的装配流程和用到的核心类属实未曾搞明白,因此我还需要一次细致的梳理复盘:

首先我们明确的是对于任何一个SpringBoot项目来说,我们都会在启动类中加入这么一个注解@SpringBootApplication,即通过注解的方式声明这是一个SpringBoot应用服务。

package com.macro.mall;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 应用启动入口
 */

@SpringBootApplication
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication .class, args);
    }
}

对于启动类,我们需要的源码功能寻找点有两个:

  • 注解@SpringBootApplication
  • main中的run()方法。

1.1 @SpringBootApplication

        首先进到@SpringBootApplication注解的源码中,我们知道其实注解也被成为声明式接口,而在SpringBootApplication注解的上方还有一些注解,除了一些常规的注解,我们主要来看看这些注解在整个自动装配过程中起到了怎样的作用。

//声明该注解的使用范围,该注解只能用类中
@Target({ElementType.TYPE})
//注解声明的作用周期:在运行的时候
@Retention(RetentionPolicy.RUNTIME)
//该注解的文档信息将被记录
@Documented
//该注解可以被继承
@Inherited
//声明下面是SpringBoot的一个配置类
@SpringBootConfiguration
//允许自动装配
@EnableAutoConfiguration
//开启组件扫描:排除一些过滤规则
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    ...
    ...
    ...
}

1.1.1 @SpringBootConfiguration

这其实是一个SpringBoot的配置类,进入SpringBootConfiguration注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值