1 @SpringBootApplication
@SpringBootApplication注解标注在主程序类上,其底层有@SpringBootConfiguration、@EnableAutoConfiguration 、@ComponentScan:
- @SpringBootConfiguration:@SpringBootConfiguration底层有一个@Configuration,表明当前类是一个配置类;
- @ComponentScan:指定要扫描哪些包
- @EnableAutoConfiguration:由@AutoConfigurationPackage和@Import组成。
@AutoConfigurationPackage底层是@Import({Registrar.class}),是利用Registrar将主程序所在的包及其子包的所有组件注册到容器中,这也就解释了springboot包扫描的默认规则即默认扫描主程序所在的包及其子包。
@Import利用其中的方法,首先在springboot一启动时给容器中加载的所有自动配置类,共计127个,这127个自动配置类是写死在文件中的,之后利用条件装配规则(@Conditional)完成按需配置。
@Bean//组件名就叫方法名multipartResolver
@ConditionalOnBean({MultipartResolver.class})//容器中有该类型才生效
@ConditionalOnMissingBean(
name = {"multipartResolver"}
)//容器中没有multipartResolver这个名字的组件才生效
public MultipartResolver multipartResolver(MultipartResolver resolver) {
//@Bean的方法中的参数从容器中找
return resolver;
}
//最终结果是如果用户自己配的multipartResolver不叫multipartResolver
//可以自动变成multipartResolver,达到规范配置的效果
通过查看底层源码,发现springboot默认会配置好所有的组件,但是如果用户也配置了以用户的优先。
1.1 总结
- springboot会先加载所有自动配置类 xxxxxAutoConfiguration
- 每个自动配置类按条件生效,而且默认会绑定配置文件指定的值,这个值在xxxxProperties里面拿,xxxProperties和配置文件进行了绑定
- 生效的自动配置类会向容器中注册许多组件
- 有了组件就有了相应的功能,但是只要用户也配置了组件,以用户的优先
- 定制化配置两种方法:直接在配置类中用@Bean替换组件;在创建的配置文件中使用配置项修改默认的配置信息。比如说配置字符编码格式在HttpEncodingAutoConfiguration里的注解中可以得知
1.2 springboot使用步骤
在简单了解了自定配置的原理后,总结了springboot的使用流程如下:
- 引入场景依赖
- 查看自动配置了哪些(选做),可以自己分析,默认场景对应的自动配置一般都生效,或者在application.properties配置文件中用debug=true开启自动配置报告,其中Positive(生效组件)、Negative(不生效组件)
- 查看是否需要修改配置项:可以通过查看文档 配置项参考文档进行修改,或者自己分析xxxxProperties里对应的前缀
- 如果修改配置项不能满足要求,可以直接用@Component和@Bean往容器中添加组件,或者用自定义器 xxxCustomizer
2 开发技巧
2.1 lombok
简化javabean的开发,省去gettersetter方法、tostring方法、无参构造、全参构造方法、日志等
使用步骤:
- 导入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
- 在IDE下载插件
- 在javabean加上注解,其中@Data取代gettersetter方法、@NoArgsConstructor取代无参构造、@AllArgsConstructor取代全参构造、@ToString取代toString方法、@EqualsAndHashCode取代hashcode方法
- 在类上加注解@Slf4j,通过log.info方法可以打印日志
2.2 dev-tools
dev-tools是伪热更新,本质上是重新编译项目
使用步骤:
- 导入依赖
dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
- Crtl F9进行重新编译
2.3 Spring Initailizr(项目初始化向导)
直接创建一个springBoot项目,可以对需要的场景进行勾选,创建完成之后就会自动生成SpringBoot项目相应的主程序类、pom.xml文件等,其中resource文件下的statics放静态资源,templates放页面。
注意,生成项目后,删掉.mvn文件夹下的properties文件,之后更改maven的设置