Springboot
SpringBoot简介
SpringBoot 是一个快速开发的框架, 封装了Maven常用依赖、能够快速的整合第三方框架;简化XML配置,全部采用注解形式,内置Tomcat、Jetty、Undertow,帮助开发者能够实现快速开发,SpringBoot的Web组件(spring-boot-starter-web),默认集成的是SpringMVC框架。
对应的SpringBoot原理介绍:
- 能够帮助开发者实现快速整合第三方框架 (原理:Maven依赖封装)
- 去除xml配置 完全采用注解化 (原理:Spring体系中内置注解方式)
- 无需外部Tomcat、内部实现服务器(原理:Java语言支持内嵌入Tomcat服务器)
SpringBoot、SpringMVC、SpringCloud的区别
SpringBoot 是一个快速开发的框架,能够快速的整合第三方框架;简化xml配置,全部采用注解的形式,内置Tomcat容器,帮助开发者实现快速开发。
而Springboot的默认组件是SpringMVC框架,SpringMVC是控制层。
比如,Springboot框架中用到的RestController注解就是SpringMVC提供的。
SpringCloud依赖于Springboot默认情况下已经整合好的SpringBoot组件,可以使用SpringMVC编写Http协议接口,同时SpringCloud是一套完整的微服务解决框架,提供微服务技术解决方案。
SpringBoot快速入门
SpringBoot依赖:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
</parent>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.8.RELEASE</version>
</dependency>
</dependencies>
在pom.xml中引入spring-boot-start-parent,它可以提供dependency management(依赖管理),引入以后在引入其它dependency的时候就不需要注明version了。
spring-boot-starter-web是Springboot的核心组件,它默认已经帮你整合好了Spring、SpringMVC。
我们可以看导入的jar包:
他已经给我们整合好tomcat,Spring,SpringMVC了
我们点开spring-boot-starter-web查看实现原理(底层封装依赖)就可以理解了
注解@RestController
首先应该建包:
controller
下放的是web+接口,即视图层和业务逻辑层;
service
下放到的是接口,即业务逻辑层
写一个类,文档注释介绍得很清晰
/**
* @Author: Forward Seen
* @CreateTime: 2022/03/09 14:51
* @Description: @RestController、@ResponseBody使用
* 如果在类上加上@RestController,该类中所有的SpringMVCUrl接口映射都是返回json格式
* 如果在类上用的是@Controller,则需要在方法上加上@ResponseBody,该方法返回json格式
* 要注意,@RestController是SpringMVC提供的注解,而不是Springboot提供的。
*
* 在微服务接口开发中,我们一般都使用Rest风格,也就是数据传输的格式都是json格式,它的协议
* 采用的是http协议
*
* 注解@Controller是控制层注解,SpringMVCUrl接口映射,默认的情况下返回页面跳转,
* 如果需要返回json格式,则还需要在方法上添加@ResponseBody注解;
* 当该类中大量方法都需要返回json格式的话,使用@Controller就显得冗余,这时直接在类上
* 添加@RestController注解即可。
*/
@RestController
public class HelloWorldService {
@RequestMapping
public String getUser(){
return "Forward";
}
}
Springboot启动
首先,我们要在类上加上@EnableAutoConfiguration
1 注解,然后在启动类入口添加一个main方法,调用SpringApplication.run(启动类,参数)
@RestController
@EnableAutoConfiguration
public class HelloWorldService {
@RequestMapping("/getUser")
public String getUser(){
return "Forward";
}
public static void main(String[] args) {
/**
* 启动类入口class
*/
SpringApplication.run(HelloWorldService.class,args);
}
}
然后成功启动界面:
我们可以看到启动的信息,他默认启动并初始化了Tomcat,端口8080,http协议。
之后我们就可以在浏览器中访问了
如果我们要是使用@Controller
注解,就需要在方法上添加@ResponseBody
,否则返回的就不是json格式,我们在页面上访问就会报404 2
当然这种方式还是推荐@RestController
@EnableAutoConfiguration
@Controller
public class HelloWorldService {
@RequestMapping("/getUser")
@ResponseBody
public String getUser(){
return "Forward";
}
public static void main(String[] args) {
SpringApplication.run(HelloWorldService.class,args);
}
}
上面那个是在本类中运行的,若现在我想在访问其它类是否可以?答案是不行的。需要加上在运行类上加上@ComponentScan(basePackages = "包名")
3才可以。
@RestController
@EnableAutoConfiguration
public class HelloWorldService {
@RequestMapping("/getUser")
public String getUser(){
return "Forward";
}
}
@ComponentScan(basePackages = "com.symc.service")
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(HelloWorldService.class,args);
}
}
对于上面的方式上面的方式,我们发现:@EnableAutoConfiguration
、@ComponentScan
它们还是比较冗余的。
我们可以在启动类上加上@SpringBootApplication
4注解。
最后我们将项目注解改成这样:
@SpringBootApplication
@RestController
public class HelloWorldService {
@RequestMapping("/getUser")
public String getUser(){
return "Forward";
}
}
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(HelloWorldService.class,args);
}
}
所以使用Springboot框架是不是特别简单呢!但是要注意@SpringBootApplication
注解的扫包范围 4 !
@EnableAutoConfiguration
注解:作用在于让 SpringBoot 根据应用所声明的依赖来对 Spring 框架进行自动配置,这个注解告诉SpringBoot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。它是springboot提供的注解。 ↩︎404状态码,找不到资源,在开发者的角度很可能是资源存放路径不对。 ↩︎
@ComponentScan
:控制器扫包范围。它是spring-context提供的注解。 ↩︎@SpringBootApplication
: 该注解被@SpringBootConfiguration
、@EnableAutoConfiguration
、@ComponentScan
所修饰,换言之 Springboot 提供了统一的注解来替代以上三个注解。扫包范围:在启动类上加上该注解,当前包下或者子包下所有的类都可以扫到。 ↩︎ ↩︎