【项目实战】从0开始入门SpringBoot源码 - SpringBoot自动装配 和 @SpringBootApplication注解源码

一、SpringBoot自动装配是什么?

SpringBoot提供了自动装配的功能,可以让开发者更加简单地进行依赖注入。它指在启动SpringBoot应用时,会自动根据项目的依赖关系,从本地仓库或远程仓库下载所需的jar包,并自动地完成依赖注入,生成Bean对象,然后将它们交给Spring容器进行管理。

使用SpringBoot自动装配可以让开发者更加简单地管理类之间的依赖关系,提高开发效率。但需要注意的是,在使用自动装配时,需要保证类的依赖关系正确,否则可能会出现一些难以排查的问题。

二、SpringBoot自动装配的原理

在启动类上添加了@SpringBootApplication注解
自动装配的原理是基于Spring的依赖注入和面向切面编程的特性实现的。在SpringBoot中,当一个类被标注了@Component或@Service等注解后,Spring会自动扫描该类的依赖,并尝试通过自动装配将这些依赖注入到该类中。

三、@SpringBootApplication注解入门介绍

@SpringBootApplication注解是一个组合注解

@SpringBootApplication注解由三个子注解组成,作用分别如下

  • @SpringBootConfiguration告诉SpringBoot这是一个主配置类
  • @ComponentScan开启组件扫描
  • @EnableAutoConfiguration开启自动配置

四、SpringBoot自动装配主要有两种方式

自动装配有两种方式:构造器自动装配和setter方法自动装配。

4.1 构造器自动装配

通过在类中定义一个构造器,并在该构造器中注入该类的依赖来实现自动装配。

在使用构造器自动装配时,需要在@Component或@Service等注解中添加@Autowired注解,以告诉Spring需要自动装配该依赖。

4.2 setter方法自动装配

通过在类中定义一个setter方法,并在该方法中注入该类的依赖来实现自动装配。

在使用setter方法自动装配时,需要在@Component或@Service等注解中添加@Autowired注解,以告诉Spring需要自动装配该依赖。

4.3 其他自动装配方式

除了构造器自动装配和setter方法自动装配,Spring还支持其他自动装配方式,如通过@ConfigurationProperties注解自动装配配置文件中的属性值。

五、@SpringBootApplication注解源码

先来看启动类的代码

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

这个注解的源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
    
     @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
    
    
}

注解叠加,完全是由以下三个注解叠加而来。

5.1 @SpringBootConfiguration 告诉SpringBoot这是一个主配置类

该注解是Spring Boot的注解,源码如下:

@Target({
    
    ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
    
    
		@AliasFor(annotation = Configuration.class)
		boolean proxyBeanMethods() default true;
}

从源码可以看出,
@SpringBootConfiguration 完全就是@Configuration 注解,
@Configuration 是Spring中的注解,表示该类是一个配置类,
因此可以在启动类中做一些配置类可以做的事,比如注入一个Bean 。

原来如此,我们经常会在 @SpringBootConfiguration 注入一些Bean

5.2 @ComponentScan 开启组件扫描

Spring中的注解,包扫描的注解,作用在项目启动时,扫描启动类的同类级以及下级包中的Bean。

5.3 @EnableAutoConfiguration 开启自动配置

  • 开启自动配置,在项目启动时,向IOC容器中快速注入Bean 而已。
  • @EnableAutoConfiguration 注解作用:@Import 的一种形式
    源码如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
    
    

看到有个 @Import 注解,使用的是ImportSelector的方式

猜你喜欢

转载自blog.csdn.net/wstever/article/details/129978219