Spring Boot应用的启动类:
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
或者
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
...
}
@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 {};
}
@AutoConfigurationPackage:自动配置包,指定了默认的包规则。利用Registrar给容器中导入一系列组件。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(AutoConfigurationPackages.Registrar.class)// 利用Registrar给容器中导入一系列组件
public @interface AutoConfigurationPackage {
String[] basePackages() default {};
Class<?>[] basePackageClasses() default {};
}
@Import(AutoConfigurationImportSelector.class):默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件,获取到所有需要导入到容器中的配置类xxxxAutoConfiguration。(似乎新版本的Spring Boot把所有类的META-INF/spring.factories合起来放在一起了,一共一百多个)。

虽然一共加载了一百多个xxxxAutoConfiguration配置类,但实际上,这些配置类中都包含了条件装配注解(@Conditional),按照条件装配规则,最终会按需配置。
比如AopAutoConfiguration类:
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(
prefix = "spring.aop",
name = {"auto"},
havingValue = "true",
matchIfMissing = true
)
public class AopAutoConfiguration {
public AopAutoConfiguration() {
}
...
}
以DispatcherServletAutoConfiguration的内部类DispatcherServletConfiguration为例子:
@Bean
@ConditionalOnBean(MultipartResolver.class) //容器中有这个类型组件
@ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字 multipartResolver 的组件
public MultipartResolver multipartResolver(MultipartResolver resolver) {
return resolver;//给容器中加入了文件上传解析器;
}
给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。目的是防止有些用户配置的文件上传解析器不符合规范。
SpringBoot默认会在底层配好所有的组件,但是如果用户自己配置了以用户的优先。
xxxxxAutoConfiguration ----> xxxxProperties ----> application.properties
引入场景依赖
查看自动配置了的详细信息
是否需要修改配置
基本使用:Lombok用标签方式代替构造器、getter/setter、toString()等鸡肋代码。
spring boot已经管理Lombok,并未集成了Lombok插件。只需要引入依赖即可使用:
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
示例
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@Component
public class User {
private String name;
private int age;
private Pet pet;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
各个注解的作用:
简化日志开发:使用@Slf4j注解
基本使用:可以使用ctrl+F9来重新启动项目
添加依赖:
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<optional>trueoptional>
dependency>
dependencies>
我的评价是:鸡肋!