IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 跟小笼子一起学之SpringBoot注解对比分析 -> 正文阅读

[Java知识库]跟小笼子一起学之SpringBoot注解对比分析


@SpringBootApplication

在这里插入图片描述
我们可以看到@SpringBootApplication中包含@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan通常用在主类上。

我们可以把@SpringBootApplication看作是@Configuration@EnableAutoConfiguration@ComponentScan 注解的集合。@SpringBootApplication

这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。

注解说明
@SpringBootApplicationSprnig Boot项目的核心注解,目的是开启自动配置
@Configuration用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册
@SpringBootConfiguration这个注解就是 @Configuration 注解的变体,只是用来修饰是 SpringBoot 配置而已,或者可利于 SpringBoot 后续的扩展。
@EnableAutoConfiguration允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean。
@ComponentScan用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component 注解进行注册 bean 实例到 context 中

SpringBean相关

@Component

@Component是Spring中的一个注解,它的作用就是实现bean的注入。与@Component注解功能上相同的还有@Service@Controller@Repository

注解说明
@Component通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注
@Service业务层(server)注入,主要涉及一些复杂的逻辑,需要用到 Dao 层
@Controller控制层(controller)注入,对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
@Repository持久层(dao)注入,主要用于数据库相关操作

@Autowired

自动导入对象到类中,被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。

@Service
public class UserService {
    ......
}

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;
   ......
}

@Autowired、@Qualifier和@Resource

@Autowired功能相似的还有@Qualifier@Resource这三个注解都是基于自动装配,@Autowired使用的较多,而@Qualifier需要配合@Autowired进行使用,@Resource则是通过名字进行自动装配

注解说明
@Autowired会根据属性的类型(by type )找到对应的 Bean 进行注入
@Qualifier按名字注入 一般当出现两个及以上bean时,不知道要注入哪个,结合@AutoWired使用
@Resource默认按名称注入例如@Resource(name = “GQL”)则根据name属性注入找不到则报错,若无name属性则根据属性名称注入,如果匹配不成功则按照类型匹配,再匹配不成功则报错。

具体的代码实现请看另一篇文章:

@RestController

@RestController注解是@Controller@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直 接填入 HTTP 响应体中。

在传统的 Spring MVC 的应用中关于单独使用单独使用 @Controller 不加 @ResponseBody的话一般使用在要返回一个视图。

@Controller +@ResponseBody 返回 JSON 或 XML 形式数据

@Controller 和 @RestController的对比

@Controller 返回一个页面

单独使用@Controller不加@ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况
在这里插入图片描述

@RestController 返回JSON 或 XML 形式数据

@RestController只返回对象,对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,这种情况属于 RESTful Web服务,这也是目前日常开发所接触的最常用的情况(前后端分离)。

在这里插入图片描述

如果你需要在Spring4之前开发 RESTful Web服务的话,你需要使用@Controller并结合@ResponseBody注解,也就是说@Controller +@ResponseBody=@RestController(Spring 4 之后新加的注解)。
在这里插入图片描述
此处仅作简单介绍,具体内容请参考@RestController vs @Controller

@Scope

声明 Spring Bean 的作用域,使用方法:

@Bean
@Scope("singleton")
public Person personSingleton() {    
       return new Person();
}

四种常见的 Spring Bean 的作用域:

  • singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
  • prototype : 每次请求都会创建一个新的 bean 实例。
  • request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
  • session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

@Configuration

一般用来声明配置类,可以使用@Component注解替代,不过使用Configuration注解声明配置类更加语义化。

@Configuration
public class AppConfig {    
@Bean    
public TransferService transferService() {        
       return new TransferServiceImpl();    
       }
 }

@Configuration和@Bean对比

@Configuration作用于类上面,表明这是一个配置类,而@Bean产生一个Bean对象加入Spring 容器中

一般来说,这俩个注解会在一起使用

注解说明
@Configuration作用于类上表示这是一个配置类,可理解为xml配置文件里面的< beans>标签
@Bean产生bean对象加入容器,作用于方法,可理解为xml配置文件里面的标签

处理常见的 HTTP 请求类型

5 种常见的请求类型:

  • GET :请求从服务器获取特定资源。举个例子:GET /users(获取所有学生)
  • POST :在服务器上创建一个新的资源。举个例子:POST /users(创建学生)
  • PUT :更新服务器上的资源(客户端提供更新后的整个资源)。举个例子:PUT /users/12(更新编号为 12 的学生)
  • DELETE :从服务器删除特定的资源。举个例子:DELETE /users/12(删除编号为 12 的学生)
  • PATCH :更新服务器上的资源(客户端提供更改的属性,可以看做作是部分更新),使用的比较少,这里就不举例子了。

GET 请求

@GetMapping("users")等价于@RequestMapping(value="/users",method=RequestMethod.GET)

@GetMapping("/users")
public ResponseEntity<List<User>> getAllUsers() { 
      return userRepository.findAll();
}

POST 请求

@PostMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.POST)

@PostMapping("/users")
public ResponseEntity<User> createUser(@Valid @RequestBody UserCreateRequest userCreateRequest) { 
    return userRespository.save(user);
}

PUT 请求

@PutMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)

@PutMapping("/users/{userId}")
public ResponseEntity<User> updateUser(@PathVariable(value = "userId") Long userId,  @Valid @RequestBody UserUpdateRequest userUpdateRequest) {  
  ......
}

DELETE 请求

@DeleteMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)

@DeleteMapping("/users/{userId}")
public ResponseEntity deleteUser(@PathVariable(value = "userId") Long userId){
  ......
}

@RequestMapping、@GetMapping、@PostMapping对比

上面提到了五种请求类型,在使用的过程中,他们都可以等价于一种RequestMapping。只不过RequestMapping可以发起get请求或者post,而GetMappingPostMapping只能发起get、post的请求。

这3个注解功能也是差不多的,通过注解来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,用在方法上,可以通过配置的url进行访问。

注解说明
RequestMapping@RequestMapping(url),通过该注解就可以通过配置的url进行访问,方式是get或post请求
GetMapping@GetMapping(url) ,功能类似的,限定Get请求
PostMapping@PostMapping(url),功能类似的,限定Post请求
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:10:49  更:2021-11-29 16:11:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:59:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码