SpringBoot常用注解集合「建议收藏」

SpringBoot常用注解集合「建议收藏」前言这里我们不会将springboot全部的注解都一个一个分析一遍,因为现在普遍都是前后端分离开发,所以之前用在很多的模板视图解析上的注解现在已经不怎么用到了这里就没再提。有需要的同学可以去看我的其他关于框架的专栏。Part.1:SpringMVC工作原理因为springboot其实就是spring和SpringMVC的合体版本,所以分析它的注解其实就是分析spring和SpringMVC的注解,所以我们可以先看一下SpringMVC的工作原理(具体的解析可以看我的关于SpringMVC框架的专栏),

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

这里我们不会将springboot全部的注解都一个一个分析一遍,因为现在普遍都是前后端分离开发,所以之前用在很多的模板视图解析上的注解现在已经不怎么用到了这里就没再提。有需要的同学可以去看我的其他关于框架的专栏。

Part.1:SpringMVC工作原理

因为springboot其实就是spring和SpringMVC的合体版本,所以分析它的注解其实就是分析spring和SpringMVC的注解,所以我们可以先看一下SpringMVC的工作原理(具体的解析可以看我的关于SpringMVC框架的专栏),因为它和我们的web层密切相关,而spring在这里充当的更多是一种管理者的角色(管理容器):
在这里插入图片描述
(因为是跟b站的一个up主学的,所以图也是直接那里截的,up主名叫小明哥2019,可以去看他的视频,我这里就是记录下来方便自己复习。)
如上图所示,右边那部分关于IOC的就是spring的东西了。
所谓的MVC:
在这里插入图片描述

part.2:Springboot常用注解

在这里插入图片描述
如上图所示,其中:
红色圈:springboot中的注解
黄色圈:SpringMVC中的注解
绿色圈:spring中的注册容器注解
紫色圈:spring中利用容器new对象的注解

下面开始总结:

@SpringBootApplication

这没啥好说的了,springboot自带的,是springboot项目的启动注解。

@Controller、@Repository、@Component、@Service

这个其实就是spring标志一个普通类作为一个IOC容器的注解,其作用就是标识这个类成为了一个IOC容器中的Bean工厂。作用与@Service、@Repository、@Component是一样的,名字不一样只是为了更好的区分三层架构,达到语义化的一个效果。如@Controller就是表示控制层的,@Repository就是表示数据层的,@Componment就是表示这三个哪一个都行,反正意思都一样。
在这里插入图片描述

@ResponseBody

在SpringMVC中因为控制器返回的是一个字符串,但这个字符串因为控制器在SpringMVC底层实现方式的原因,会被默认为返回是一个静态页面的名字然后以进行web页面的跳转,而加了这个注解之后控制器返回的字符串则就只是普通的字符串,不会再进行页面跳转了。
还可以提一嘴的是,如果我们前后端进行的是一个个对象的传输,则springboot因为内部已经替我们集成了一个json格式的转换工具(好像是fastjson,我忘了),所以如果传输的是对象,则自动就帮我们转换了json格式输出和写入而不需要我们自己进行json格式的转换。

@RequestBody

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用请求体传参的无疑是POST请求了,所以使用@RequestBody接收数据时,一般都用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
注意:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。
通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
举个例子:
现在前端有一个请求:

$.ajax({ 
   
        url:"/login",
        type:"POST",
        data:'{"userName":"admin","pwd","admin123"}',
        content-type:"application/json charset=utf-8",
        success:function(data){ 
   
          alert("request success ! ");
        }
    });

然后现在后端有一个控制器:

@requestMapping("/login")
    public void login(@requestBody String userName,@requestBody String pwd){ 
   
      System.out.println(userName+" :"+pwd);
    }

这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:
      String userName;
      String pwd;
    那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上
    需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。

@RestController

@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
因为前后端分离开发,后端的控制器不再需要返回作用为进行页面跳转的字符串,所以我们一般将这个注解加在整个控制器类的上面以表示下面所有的控制器方法通通都只返回普通字符串。

@RequestMapping

这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。并且一个处理请求地址映射的注解,可用在类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
作用于方法上,则是作为请求 URL 的第二级访问目录。
总结就是:用于建立请求URL和处理请求方法之间的对应关系。(我们一般写类上,我也不知道为啥,应该是习惯叭)

@GetMapping、@PostMapping、@DeleteMapping、@PutMapping

@GetMapping是Spring4.3提供的新注解,它是一个组合注解,等价于@RequestMapping(method = RequestMethod.Get ),用于简化开发,注意:@RequestMapping如果没有指定请求方式,将接收Get、Post、Head、Options等所有的请求方式。同理还有@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping等。
这个注解一般我们用在方法上,我也不知道为啥,应该也是习惯叭,我遇见的项目都是这么写的。

@Autowired、@Quailifier、@Resource

package com.itheima.service.impl;

import com.itheima.dao.UserDao;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/* <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"> 等同于下面的@Service,注入id使用value */
@Service(value="userService")
public class UserServiceImpl implements UserService { 
   

    /*那属性的注入呢:<property name="userDao" ref="userDao"></property> 我们将使用Autowired和Qualifier */
    /* Autowired是按照数据类型从Spring容器中进行匹配的,这里因为UserDao类型的只有一个实例就是 userDao,这里这里即使省去了@Qualifier也一样可以匹配到,但是如果UserDao类型有多个的话 只用Autowired就不好使了 */
// @Autowired
    /* 而@Qualifier是按照id值从容器中进行匹配的,但是注意需要结合@Autowired才好使 */
// @Qualifier(value="userDao")
    /* 或者也可以将上面的两个都去掉,改用@Resource(name="userDao"), 这个注解就相当于 @Autowired + @Qualifier */
    @Resource(name = "userDao")
    private UserDao userDao;

    //public void setUserDao(UserDao userDao) { 
   
      // this.userDao = userDao;
    //}

    public void save() { 
   
        userDao.save();
    }
}

@Configuration、@Bean等

在这里插入图片描述
如上图所示这些注解,其实是为了让我们能够完全脱离XML配置文件的方式使用Spring而出现的,之前的什么@Component注解啥的只能满足原生框架存在的Bean,但开发当中难免会遇到其他的Bean组件,比如配置数据源就缺少对应的注解代替XML。这个时候我们就可以使用这些注解来定义一个配置类,那么这个类就将作为Spring的核心配置文件类。
这其实就是把XML配置文件改成了Java形式的代码,然后用注解与Spring容器关联起来。在这个意义上,我们可以完全脱离配置文件去用Spring开发了,如下:

package com.itheima.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;

//标志该类是Spring的核心配置类
@Configuration
//<context:component-scan base-package="com.itheima"></context:component-scan>
//扫哪个包则在参数里面声明
@ComponentScan("com.itheima")
// <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
@PropertySource("classpath:jdbc.properties")
public class SpirngConfiguration { 
   
    /* <!--配置c3p0数据源--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> 上面这一段也可以被当成配置类的方法来使用注解解决 */

    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String user;
    @Value("${jdbc.password}")
    private String password;


    @Bean("dataSource") //Spring会将当前方法的返回值以指定名称存储到Spring容器中
    public DataSource getDataSource() throws PropertyVetoException { 
   
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(user);
        dataSource.setPassword(password);
        return dataSource;
    }
}


@RequestParam

在这里插入图片描述
这个注解的意思是接收从页面访问过来携带的请求参数,带?的这种。(这是前后端不分离情况下的,如果是分离的都是restful风格的了,不会有这种请求参数)

在这里插入图片描述
意思是我们在浏览器端输入url访问这个控制器时必须携带一个叫id的请求参数,默认必须要带否则报错,不过将required改成false之后就不是必须要带的了,defaultValue的作用是如果带的参数没有值则默认为自己设定的,上图就是0。

@PathVariable

在这里插入图片描述
处理向上图这种携带的参数,用斜杠的参数。
在这里插入图片描述
带斜杠的参数我们就可以用这个注解来解析两个斜杠中的占位符所代表的参数值,比如我们传的id值是1234,则占位符中{id}代表的就是1234,我们就可以用@PathVariable解析出来。

总结

没啥好总结的,差不多就是这些了我觉得。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171239.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • DHCP Option 82详细讲解[通俗易懂]

    DHCP Option 82详细讲解[通俗易懂]option82是dhcp报文中的中继代理信息选项(relayagentinformationoption)。当dhcpclient发送请求报文到dhcpserver时,若需要经过dhcp中继,则由dhcp中继将option82添加到请求报文中。option82包含很多sub-option,本文中的option82只支持sub-option1、sub-option2和sub-

    2022年10月16日
  • 频次最高的38道selenium面试题及答案(下)[通俗易懂]

    频次最高的38道selenium面试题及答案(下)[通俗易懂]20、selenium中隐藏元素定位,你该如何做?隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,操作元素是指click、clear、send_keys等这些方法)。我们可以用js来操作隐藏元素。js和selenium不同,只有页面上有的元素(在dom里面的)都能正常操作。21、如何判断一个页面上元素是否存在?法1:用try…except在代码块加上法2:用elements定义组元素方法然后根其元素个数len()<1存在返回True,不存在则返回F.

  • jquery 获取或设置radio单选框选中值的方法

    jquery 获取或设置radio单选框选中值的方法jquery获取或设置radio单选框选中值的代码1、获取选中值,三种方法都可以:2、设置第一个Radio为选中值:3、设置最后一个Radio为选中值:4、根据索引值设置任意一个radio为选中值:5、根据Value值设置Radio为选中值6、删除Value值为rd2的Radio7、删除第几个Radio8、遍历Radio1、获取选中值,三种方法都可以:$(‘input:radio:check…

  • 数据库基础:select基本查询语句

    数据库基础:select基本查询语句数据库基本查询语句规范为:select区域from表名查询指定表select*from表名*:代表所有列示例:select*fromTL_REQUEST查询指定列select列名from表名列名:代表从指定的列名中查找,:如果是查找对应的多列,则用英文逗号间隔示例:selectBU_NOfromTL_REQUEST…

  • goland 2021.5 x64永久激活码(最新序列号破解)

    goland 2021.5 x64永久激活码(最新序列号破解),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Codecs模块[通俗易懂]

    Codecs模块这篇文章主要介绍了python自然语言编码转换模块codecs介绍,codecs专门用作编码转换,通过它的接口是可以扩展到其他关于代码方面的转换,需要的朋友可以参考下。常用说法:decode->unicode(内部编码格式)encode->其他编码格式解码(decode)成内部编码格式unicode,编码(encode)成其他格式。python对多国

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号