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
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
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
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
2
# @Import({AutoConfigurationImportSelector.class})
该注解的作用是给IOC容器中导入一个组件,导入的组件就是AutoConfigurationImportSelector.class这个组件。
SpringBoot将J2EE的整体整合解决方案都集成到spring-boot-autoconfigure-2.0.1.RELEASE.jar这个jar包里了
最后更新时间: 2022/7/23 10:17:11