浅墨散人 浅墨散人
  • 基础
  • 设计模式
  • JVM
  • Maven
  • SpringBoot
  • 基础
  • Flask
  • Diango
  • Pandas
  • SqlAlchemy
  • Sqoop
  • Flume
  • Flink
  • Hadoop
  • Hbase
  • Hive
  • Kafka
  • Kylin
  • Zookeeper
  • Tez
  • MySQL
  • Doris
  • Chrome
  • Eclipse
  • IDEA
  • iTerm2
  • Markdown
  • SublimeText
  • VirtualBox
  • WebStrom
  • Linux
  • Mac
  • Hexo
  • Git
  • Vue
  • VuePress
  • 区块链
  • 金融
数据仓库
数据治理
读书笔记
关于我
GitHub (opens new window)
  • 基础
  • 设计模式
  • JVM
  • Maven
  • SpringBoot
  • 基础
  • Flask
  • Diango
  • Pandas
  • SqlAlchemy
  • Sqoop
  • Flume
  • Flink
  • Hadoop
  • Hbase
  • Hive
  • Kafka
  • Kylin
  • Zookeeper
  • Tez
  • MySQL
  • Doris
  • Chrome
  • Eclipse
  • IDEA
  • iTerm2
  • Markdown
  • SublimeText
  • VirtualBox
  • WebStrom
  • Linux
  • Mac
  • Hexo
  • Git
  • Vue
  • VuePress
  • 区块链
  • 金融
数据仓库
数据治理
读书笔记
关于我
GitHub (opens new window)
  • SpringBoot

    • SpringBoot
    • SpringBoot(3)_@SpringBootApplication解析
      • @SpringBootApplication解析
        • @SpringBootConfiguration注解
        • @EnableAutoConfiguration注解
    • SpringBoot(1)_HelloWord
    • SpringBoot(2)_使用IDEA快速创建SpringBoot项目
  • Java
  • SpringBoot
2018-04-09
目录

SpringBoot(3)_@SpringBootApplication解析

# @SpringBootApplication解析

标注了@SpringBootApplication注解的类是SpringBoot的一个主程序类,是SpringBoot的配置类。

以下是@SpringBootApplication的源码

package org.springframework.boot.autoconfigure;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;

@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 {
    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    Class<?>[] exclude() default {};
    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    String[] excludeName() default {};
    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default {};
    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

# @SpringBootConfiguration注解

点击@SpringBootConfiguration(SpringBoot配置类),该注解标注在某个类上,表示这是一个SpringBoot的配置类,点击可以看到如下源码

package org.springframework.boot;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Configuration;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

其中可以看到@Configuration这个注解,这是Spring提供的注解,并不是SpringBoot的注解,表示开启自动配置的类。@Configuration也是SpringIOC容器中的一个组件

# @EnableAutoConfiguration注解

@EnableAutoConfiguration这个注解表示开启自动配置功能,告诉SpringBoot开启自动配置功能。

@EnableAutoConfiguration注解的源码如下:

package org.springframework.boot.autoconfigure;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Import;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
    Class<?>[] exclude() default {};
    String[] excludeName() default {};
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# @AutoConfigurationPackage注解

可以看到有一个@AutoConfigurationPackage注解,这个注解表示自动配置包。

将主配置类(标注了@SpringBootApplication的类)的所在包及子包下的所有组件扫描到IOC容器中

@AutoConfigurationPackage表示自动导入AutoConfigurationImportSelector这个类,将这个组件导入IOC容器中。

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
1
2

# @Import({AutoConfigurationImportSelector.class})

该注解的作用是给IOC容器中导入一个组件,导入的组件就是AutoConfigurationImportSelector.class这个组件。

SpringBoot将J2EE的整体整合解决方案都集成到spring-boot-autoconfigure-2.0.1.RELEASE.jar这个jar包里了

#SpringBoot
最后更新时间: 2022/7/23 10:17:11
SpringBoot
SpringBoot(1)_HelloWord

← SpringBoot SpringBoot(1)_HelloWord→

最近更新
01
分区分桶
08-21
02
数据模型(重要)
08-21
03
安装和编译
08-21
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式