1、基本概念
- Spring Boot 是一个基于 Spring 框架的开源框架,它简化了 Spring 应用程序的配置和部署过程,并提供了很多常用功能的开箱即用的解决方案。
- Spring Boot 采用约定大于配置(Convention Over Configuration)的理念,可以快速构建可独立运行、生产级别的应用程序。
- 它还集成了许多常用的库和工具,如 Tomcat、Hibernate、Spring Data 等,使得开发人员可以更加专注于业务逻辑的开发。
2、自动装配
自动装配是 Spring Boot 的核心。指的是通过注解或者一些简单的配置就能在 Spring Boot 的帮助下实现某块功能。没有springboot的话,要写xml配置文件、配置类并提供controller类进行配置,但有了自动配置只需要在springboot中引入一个对应组件的starter即可。引入starter就可以通过少量的注解和简单的配置就能使用第三方组件提供的功能了。
1、springboot如何实现自动装配?
SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,获取对应的需要进行自动装配的类加载到 Spring 容器,并生成相应的bean对象交给IOC容器来进行管理。
springboot的核心注解:@SpringBootApplication
@SpringBootApplication看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制,由@autoconfigurationpackage 和 @ import 组成@Configuration:配置类@ComponentScan:扫描被@Component(@Service,@Controller)注解的 bean,注解默认会扫描启动类所在的包下所有的类 。
自动装配核心功能的实现实际是通过 AutoConfigurationImportSelector类
1 public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware, ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered { 2 3 } 4 5 public interface DeferredImportSelector extends ImportSelector { 6 7 } 8 9 public interface ImportSelector { 10 String[] selectImports(AnnotationMetadata var1); 11 }
AutoConfigurationImportSelector 类实现了 ImportSelector接口,也就实现了这个接口中的 selectImports方法,该方法主要用于获取所有符合条件的类的全限定类名,这些类需要被加载到 IoC 容器中。
3 、常用注解
1、@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直接填入 HTTP 响应体中,是 REST 风格的控制器。
@RestController 和 @ Controller的区别:
- 单独使用
@Controller不加@ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况。 - 但
@RestController对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,这种情况属于 RESTful Web服务,这也是目前日常开发所接触的最常用的情况(前后端分离)。
2、处理常见的HTTP请求:
@GetMapping("users")等价于@RequestMapping(value="/users",method=RequestMethod.GET)请求从服务器获取特定资源。@PostMapping("users")等价于@RequestMapping(value="/users",method=RequestMethod.POST)在服务器上创建一个新的资源。@PutMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)更新服务器上的资源(客户端提供更新后的整个资源)@DeleteMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)从服务器删除特定的资源。- PATCH更新服务器上的资源(客户端提供更改的属性,可以看做作是部分更新)
3、前后端传值:
@PathVariable用于获取路径参数,@RequestParam用于获取查询参数。
-
@RequestBody:用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且是json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。
4、java bean相关:
@Component:通用的注解,可标注任意类为Spring组件。如果一个 Bean 不知道属于哪个层,可以使用@Component注解标注。@Repository: 对应持久层即 Dao 层,主要用于数据库相关操作。@Service: 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。@Controller: 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。@Autowired注解让 Spring 容器帮我们自动装配 bean。
5、参数效验
@NotEmpty被注释的字符串的不能为 null 也不能为空@NotBlank被注释的字符串非 null,并且必须包含一个非空白字符@Null被注释的元素必须为 null@NotNull被注释的元素必须不为 null@AssertTrue被注释的元素必须为 true@AssertFalse被注释的元素必须为 false@Pattern(regex=,flag=)被注释的元素必须符合指定的正则表达式@Email被注释的元素必须是 Email 格式。@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值@DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值@DecimalMax(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值@Size(max=, min=)被注释的元素的大小必须在指定的范围内@Digits(integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内@Past被注释的元素必须是一个过去的日期@Future被注释的元素必须是一个将来的日期