第一步,创建项目,idea方式,或者是spring.io方式。略。
第二步,项目关键点介绍。Pom文件,目录结构,@SpringBootApplication注解。
第三步,运行项目。三种方式。
- IDE方式下,直接运行main方法即可。
- 当为jar包时,通过java -jar app.jar运行项目。
- 使用maven插件,运行mvn spring-boot:run
1、pom文件
Pom文件中的依赖有两种。
第一种,spring-boot-starter-parent。
spring-boot-starter-parent有很多默认值。
- 默认的JDK版本为1.8
- 默认的字符集为UTF-8
- 添加其他spring-boot-start-*时,不在需要指定版本号,指定parent版本号即可。
- 添加了repackage的goal。goal是项目生命周期中的一个阶段
- 默认的resource filtering,运行resources:resource即会将资源文件中的变量替换为具体值。
- 添加了默认的一些插件,例如exec,shade
- 配置文件有默认的resource filtering。
第二种,spring-boot-starter-*,自动注入的一些功能,例如web会注入starter-web, aop会注入starter-aop,数据源会注入starter-jdbc。
2、目录结构
典型的maven web目录结构,与spring boot框架无关。
3、@SpringBootApplication
它等价于@Configuration,@EnableAutoConfiguration,@ComponentScan注解。
@Configuration表示它是一个配置类。
@ComponentScan配置扫描bean的路径。默认值为classpath下的所有包
@EnableAutoConfiguration注解的部分源码如下:
@AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration {//略}
@AutoConfigurationPackage用于自动扫描相关的包。
AutoConfigurationImportSelector中有个方法getCandidateConfigurations,调用getCandidateConfiguration---->SpringFactoriesLoader.loadFactoryNames--->loadSpringFactories,查看loadSpringFactories代码如下:
Enumeration<URL> urls = (classLoader != null ? classLoader.getResources(FACTORIES_RESOURCE_LOCATION) : classLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION)); // 其中常量值 public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
它会加载spring-boot-autoconfiguration-version.jar包,META-INF目录下的spring.factories文件,这个文件就是spring boot自动注入的配置。