快速入门案例
需求:发送/hello请求,响应hello springboot
步骤:(1)创建普通的maven项目,不使用骨架;(2)在pom.xml中引入依赖;
(3)创建主程序入口,命名无所谓,在主程序所在的类加上@SpringBootApplication,表明这是一个springboot应用;
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
(4)创建一个HelloController类,在其中写业务方法;
/*
@RestController = @ResponseBody + @Controller
*/
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello springboot";
}
}
(5)运行主程序的main方法,在浏览器发生/hello请求,完成测试。
入门案例进阶
配置文件
springboot将所有的配置都抽取在resource下的application.properties,用键值对的格式进行配置
打包运行
补充:开发与部署
开发是在本地使用IDE完成项目编写的过程,此时项目只能在本地环境运行,别人的电脑上是访问不到的,要想别人也能够正常使用我们的项目就得进行部署。
以前项目要部署到目标服务器,需要把项目打成war包,同时还得在目标服务器安装tomcal配置运行环境,而有了springboot,则可以在pom.xml中引入插件,然后直接将项目打包为一个jar包,这时的jar包自带了运行环境,可以直接运行,这个jar包一般称为"fat jar"又叫小胖jar。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
springboot特性
依赖管理
starter场景启动器:springboot只需要在项目的pom.xml文件中导入spring-boot-starter-web即可将编写一个web应用所需要的所有的jar包自动加载完成
父项目做依赖管理:父项目声明开发中常见的依赖及版本号,子项目只要继承父项目,子项目写依赖一般就不用写版本号,当引入的依赖不在父项目中还得写版本号;
快速入门案例中,该项目继承了spring-boot-starter-parent这一父项目,而spring-boot-starter-parent又继承了spring-boot-dependcies。
自定义版本号:如果想自定义依赖版本号,先在spring-boot-dependcies查看规定当前依赖的版本号用的key,然后在pom.xml中重写版本号即可。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<properties>
<mysql.version>5.1.23</mysql.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency><!--父项目做依赖管理,这里不用写版本号-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
自动配置
自动配好tomcat;
自动配好web常见功能(字符编码问题)和SpringMVC常用组件,可以用如下代码查看具体配置了那些组件;
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
}
默认包扫描:主程序所在的包及其子包都会被扫描到,其他位置的类不会被扫描。
要扫描其他位置的类,有两种方法解决:其一是使用@SpringBootApplication里的属性scanBasePackages人为指定包注解扫描的范围;其二是拆开@SpringBootApplication,使用其中的@ComponentScan注解指定需要扫描的包
//法一
@SpringBootApplication(scanBasePackages = "com.xy")
//法二
/*
@SpringBootApplication = @SpringBootConfiguration +
@EnableAutoConfiguration +
@ComponentScan
*/
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.xy")
配置都有默认值:所有配置都有默认值,而且这些配置最终都是映射到对应的java类,可以在resource下的application.properties中修改默认值;
按需加载所有的自动配置项:springboot中所有的自动配置功能都在spring-boot-autoconfigure这个包,包中有所有starter,但并不会加载全部的starter而是自动配置,即导入哪个依赖才加载哪个。