SpringBoot源码刨析
Map接口的基于哈希表的实现。
主要优势
- 不依赖传统的tomcat外部启动容器,不像一起通过打成war进行部署。可以单独以jar启动内置tomcat,jetty容器。
- 利用pom文件配置三方依赖,便于管理及引用。
- 利用注解直接引用方法配置
SpringBoot核心注解
@SpringBootApplication
@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 {}; }
|
其中比较重要的注解有@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解非常重要
@SpringBootConfiguration
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration {
}
|
@Configuration注解是用来读取spring.factories文件
@EnableAutoConfiguration注解具有配置的功能,两则有什么区别?
@EnableAutoConfiguration
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { }
|
@EnableAutoConfiguration注解使用的是自动配置机制,是自动导入。
例如:在pom引入maven包,class自动import。
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.3.5</version> </dependency>
|
class中自动import.
import cn.hutool.json.JSONUtil;
|
@ComponentScan
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Repeatable(ComponentScans.class) public @interface ComponentScan {
}
|
@ComponentScan的作用是告诉spring那个包下面的类用这个@Component注解,则会被spring自动扫描并且注入到bean容器。