一、SpingBoot入门案例
SpringBoot是用来简化Spring应用的初始搭建以及开发过程。
先快速搭建一个SpringBoot:
创建一个空project,再创建SpringBoot模块。
点击Create,出现以下页面配置成功
创建一个控制器测试一下:
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping
public String getById(){
System.out.println("springboot is running...");
return "springboot is running...";
}
}
@RestController和@Controller的异同:
同:都是用来表示Spring某个类是否可以接收HTTP请求
异:@Controller:标识一个Spring类是SpringMVC controller处理器
@RestController:是@Controller和@ResponseBody的结合体
@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。
@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。
扩展:
@RequestBody用于接收json数据,后期开发中,发送请求参数超过一个时,以json格式为主,@RequestBody应用较广
@RequestParam用于接收url地址传参或表单传参,发送非json格式数据
@PathVariable用于接收路径参数,使用{参数名称}描述路径参数。用于RESTful进行开发,当参数数量较少时,例如一个,可以采用@PathVariable接收请求路径变量,通常用于传递id值。
按上面配置在启动的时候会报一个错java: 无法访问org.springframework.web.bind.annotation.GetMapping。是jdk版本和springboot的版本不一致,降低springboot的版本或者提高jdk的版本即可。
最终修改后的版本:
直接运行下面的类,就启动了SpringBoot:
不需要Spring的配置文件,也不需要Spring的配置类,也不需要tomcat,web.xml也不用配置,直接运行!
启动成功:
仔细看一下控制台:
在浏览器中访问:
同时控制台打印 :
总结:
这两个文件直接构成了一个SpringBoot
SpringBoot简化操作体现在如下四个方面:
1.parent:用来减少配置的依赖冲突,同时简化了一些配置
使用parent可以帮助开发者进行版本的统一管理
parent定义出来以后,并不是直接使用的,仅仅给了开发者一个说明书,没有直接使用
进入到pom.xml中,进入pom的父依赖(不是知道能不能这么叫…)
进入父依赖:
再进入父的父。。。
可以看到定义了版本号,并且在依赖中引用了。因此在pom.xml中引用依赖的时候,版本号就创建好了。
定义了这么多的版本号是谁在用,是依赖在用。在pom.xml中引用依赖的时候,自动设置了版本。(因为继承)
2.start:简化配置,要用到parent继承过来的版本
start里又定义了若干坐标,一个start对应了一个要使用的技术。
3.引导类:启动,初始化了一个Spring容器
获取bean的四种方式:
通过bean的id获取;
通过bean的类型获取;
通过id和类型获取
通过接口类型来获取bean(这个接口只能有一个实现类)
Spring SpringMVC都需要IOC容器,对象都以bean的形式交给IOC容器进行管理。SpringBoot也需要Spring容器(SpringBoot只是加速Spring配置的,其实还是Spring容器)
接收一下返回值,可以看到是Spring容器:
可以得到bean,注意controller或者其他的class必须交给容器管理。
@SpringBootApplication
public class Springboot0101QuickstartApplication {
public static void main(String[] args) {
//SpringBoot的容器,归根结底,还是Spring的容器
ConfigurableApplicationContext context = SpringApplication.run(Springboot0101QuickstartApplication.class, args);
BookController bean = context.getBean(BookController.class);
System.out.println("bean============>"+bean);
User bean1 = context.getBean(User.class);
System.out.println("user============>"+bean1);
}
}
4.内嵌tomcat:
tomcat服务器运行是以对象的形式在Spring容器中运行的,并将对象交给Spring容器进行管理。
二、SpringBoot的基础配置
配置文件是resources下的application.properties。用key-value的格式书写。
加载value:先加载properties文件,通过key的方式获取${key}
# 配置端口号为80端口
server.port=80
# 设置启动的图标为关
# spring.main.banner-mode=off
spring.banner.image.location=banner.txt
# 配置日志的级别
logging.level.root=info
改个启动图标。。。
配置文件总共有3种格式,分别为:
properties格式、yml格式、yaml格式(推荐格式)
配置文件的加载优先级
properties(最高)>yml>yaml
不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留
yaml是一种数据序列化的格式,如何获取yaml文件中的内容呢?
1.yaml读取单一数据
yaml文件中:
server:
port: 80
servlet:
context-path: /test
baseDir: c:\windows
#使用${
属性名}引用数据
tempDir: ${
baseDir}\temp
#要使用转义字符的话用""包起来
tempDir1: "${baseDir}\temp\t1\t2\t3"
类中:使用@value注解,${}里写yaml文件中的配置名
//一级一级的往下排
@Value("${server.port}")
private String serverPort;
@Value("${tempDir}")
private String tempDir;
@Value("${tempDir1}")
private String tempDir1;
2.读取全部数据
用到自动装配:@Autowired
//使用自动装配将所有的数据封装到一个对象Environment中
@Autowired
private Environment env;
就可以得到属性值了:
env.getProperty("server.port")
3.读取对象数据
yaml中:
#创建类,用于封装下面的数据
#由spring帮我们去加载数到对象中,一定要告诉spring加载这组信息
#使用时从spring中直接获取信息使用
datasource:
driver: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/springboot_db
username: root
password: "0630"
将yaml中的数据封装成一个java对象:配置前缀,属性名也要一样。
/** * @author June * @version 1.0 * @description: TODO * @date 2023/5/10 17:20 * 要和配置的属性名一样 * 1.定义数据模型封装yaml文件中对应的数据 * 2.定义为spring管控的bean * 3.指定加载的数据 * application.yaml中的配置也是包装成一个对象进行访问的 */
@Component
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "MyDataSource{" +
"driver='" + driver + '\'' +
", url='" + url + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
最后通过自动装配获取到封装yaml的对象。
@Autowired
private MyDataSource myDataSource;
application.yaml中的默认配置也是包装成一个一个的java对象进行访问的。
文章评论