SpringBoot常用注解

2023-11-15

一、注解(annotations)列表 

@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让springBoot扫描到Configuration类并把它加入到程序上下文。

@Controller用于标注控制层组件,@Service用于标注业务层组件,@Repository用于标注数据访问组件,即DAO组件,而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。 Spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。它的作用和在xml文件中使用bean节点配置组件时一样的。

@Autowired自动导入。

@PathVariable获取参数。

@JsonBackReference解决嵌套外链问题。

@RepositoryRestResourcepublic配合spring-boot-starter-data-rest使用。

二、注解(annotations)详解

1.Application类

@SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。

(1)@Configuration是Spring框架提供的一个注解,它能替代传统的xml配置文件,将Spring框架中的xml文件以Java类的形式替代,去XML是SpringBoot的一个重要思想;

(2)@EnableAutoConfiguration是SpringBoot提供的一个注解,它的作用是启动SpringBoot的自动配置机制;

(3)@ComponentScan是Spring框架提供的一个注解,它能扫描项目中所有的组件(@Component, @Service, @Repository, @Controller等进行标注的类)并将其注册到Spring容器;

package com.example.myproject; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan 
public class Application { 
    public static void main(String[] args) { 
        SpringApplication.run(Application.class, args); 
    } 
}

 

 

2.Configuration类

@Configuration:相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类

@EnableAutoConfiguration: Spring Boot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库”。你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

@Bean:用@Bean标注方法等价于XML中配置的bean,意思是产生一个bean,并交给spring管理。@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。你能够使用@Scope注解来指定使用@Bean定义的bean。

@Configuration
public class AppConfig {

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

}

 

3.Component类

@Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@ComponentScan:表示将该类自动发现扫描组件。个人理解相当于,如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。

 

4.Controller类

@Controller:用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。示例代码:

@Controller 
@RequestMapping(“/demoInfo”) 
publicclass DemoController { 
    @Autowired 
    private DemoInfoService demoInfoService;
    
    @RequestMapping("/hello")
    public String hello(Map<String,Object> map){
       System.out.println("DemoController.hello()");
       map.put("hello","from TemplateController.helloHtml");
       //会使用hello.html或者hello.ftl模板进行渲染显示.
       return"/hello";
    }
}

 

@RestController:用于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集。示例代码:

package com.kfit.demo.web;

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController;

@RestController 
@RequestMapping(“/demoInfo2”) 
publicclass DemoController2 {
    @RequestMapping("/test")
    public String test(){
       return"ok";
    }
}

 

@RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。

@ResponseBody:表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用 @RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。示例代码:

@RequestMapping(“/test”) 
@ResponseBody 
public String test(){ 
return”ok”; 
}

 

5.Service类

@Service:在SpringBoot中一般用于修饰service层的组件

@Service是标记实现类上的。因为@Service是把spring容器中的bean进行实例化,也就是等同于new操作,只有实现类是可以进行new实例化的,而接口则不能,所以是加在实现类上的。

相当于 xml配置中得bean  id = service ,也可以不指定,不指定相当于 bean id =  com. service.service 就是这个类的全限定名,@Service("myMath")表示给当前类命名一个别名,方便注入到其他需要用到的类中;不加的话,默认别名就是当前类名,但是首字母小写。

getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“aaaaa”)这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service(“beanName”)@Scope(“prototype”)来改变。

 

6.Repository类

@Repository:在SpringBoot中用于标注数据访问组件,使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

 

7.Autowired类

@AutoWired:自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。

@Qualifier:当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者,具体使用方式如下:

@Autowired 
@Qualifier(value = “demoInfoService”) 
private DemoInfoService demoInfoService;

 

@Resource(name=”name”,type=”type”):没有括号内内容的话,默认byName。与@Autowired干类似的事。

@Inject:等价于默认的@Autowired,只是没有required属性;

 

Spring中@Autowired注解、@Resource注解,@Inject注解的区别

Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

 

1、@Autowired是spring自带的,@Inject是JSR330规范实现的,@Resource是JSR250规范实现的,需要导入不同的包

2、@Autowired、@Inject用法基本一样,不同的是@Autowired有一个request属性

3、@Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的

4、@Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Name一起使用

 

 

8.Value类

@Value:注入Spring boot application.properties配置的属性的值。示例代码:

@Value(value = “#{message}”) private String message;

 

9.Import类

@Import:用来导入其他配置类。

@ImportResource:用来加载xml配置文件。

 

三、JPA注解

@Entity:@Table(name=”“):表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略

@MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。

@NoRepositoryBean:一般用作父类的repository,有这个注解,spring不会去实例化该repository。

@Column:如果字段名与列名相同,则可以省略。

@Id:表示该属性为主键。

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”):表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。

@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。

@Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式

@JsonIgnore:作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。

@JoinColumn(name=”loginId”):一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。

@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件中的一对一,一对多,多对一。

四、springMVC相关注解

@RequestMapping:@RequestMapping(“/path”)表示该控制器处理所有“/path”的UR L请求。RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。 

用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。该注解有六个属性: 

params:指定request中必须包含某些参数值是,才让该方法处理。 

headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。 

value:指定请求的实际地址,指定的地址可以是URI Template 模式 

method:指定请求的method类型, GET、POST、PUT、DELETE等 

consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html; 

produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

@RequestParam:用在方法的参数前面。 

@RequestParam 

String a =request.getParameter(“a”)。

@PathVariable:路径变量。如

RequestMapping(“user/get/mac/{macAddress}”) public String getByMacAddress(@PathVariable String macAddress){ //do something; }

参数与大括号里的名字一样要相同。

 

五、全局异常处理

@ControllerAdvice:包含@Component。可以被扫描到。统一处理异常。

@ExceptionHandler(Exception.class):用在方法上面表示遇到这个异常就执行以下方法。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot常用注解 的相关文章

随机推荐

  • 【C语言程序设计实验】试卷管理系统(完整代码+函数详解) -->源代码文件文章末尾免费领取

    目录 实验简介 一 实验要求 二 实验代码 1 完整代码 2 代码解析 1 get next question number 2 add question 3 delete question 4 backup questions 5 del
  • js实现一个简易计算器

    正文 使用js实现一个简易计算器 可以进行简单的加减乘除 js代码 function jishuan 1 获取num1 num2 var num1 document getElementById num1 value var num2 do
  • TCP协议三次握手和四次分手以及数据传输过程

    1 三次握手 TCP是面向连接的 在面向连接的环境中 开始传输数据之前 在两个终端之间必须先建立一个连接 建立连接同步的过错称为三次握手 具体过程如下 1 当主机A想同主机B建立连接 主机A会发送SYN给主机B 初始化序列号seq x 主机
  • 深入了解数据导入的一些解决方案

    项目中除了有数据导出之外 也存在批量数据导入的场景 比如通过Execl电子表格进行批量开卡 批量导入用户或者部门信息等 今天探讨一下常见的数据导入方案 0x01 同步导入 如果批量导入的数据就是几十条到一两百条的数据量的话 而且每条数据导入
  • angular:使用Router.navigateByUrl传递state后如何在新组建获取state传递的data

    问题 如题 解决办法 使用history state来获取
  • 网络分析器Wireshark过滤器设置

    1 简介 Wireshark是目前全球使用最广泛的开源抓包软件 可以对网络进行故障定位 对网络黑客攻击进行快速定位 分析底层通信机制等 2 Wireshark安装 下载地址 Wireshark Go Deep https www wires
  • Mybatis快速学习笔记(建议收藏)

    Mybatis快速学习目录 Mybatis概念 MyBatis 快速入门 Mapper代理开发 MyBatis核心配置文件 配置文件的各种细节 Mybatis三部曲 如何解决字段名和属性名不一致问题 Mybatis如何接收来自数据库参数 多
  • 引用window自定义变量以及ts在window上自定义变量数据类型报错的解决方案

    一 问题描述 举个例子 在TypeScript中 当我们需要给window对象添加全局变量 如testName 或者需要使用window下自定义创建的变量 以testName为例 会出现以下ts报错 类型 Window typeof glo
  • 计算机网络详细讲解-----核心,边缘;datagram,virtual circuit【计算机网络养成】

    计算机网络养成 内容导航 计算机网络养成 网络边缘 应用进程和应用进程联系的模式 客户 服务器模式 C S架构 对等模式 peer peer 模式 网络边缘 采用网络设施的面向连接服务 目标 握手 TCP 传输控制协议 传输层 Transm
  • 英语专栏——application

    application application的基本意思是申请 申请表 但在IT术语中它是应用程序的意思 表示某种技术 系统 产品的应用 我们所称的APP就是这个的缩写 From Wikipedia Application software
  • Vue3通透教程【十五】补充TS开发环境搭建问题

    文章目录 写在前面 Node中搭建TS开发环境 验证环境 写在最后 写在前面 专栏介绍 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章 应粉丝要求开始更新 Vue3 的相关技术文章 Vue 框架目前的地位大家应该都晓得 所谓三大框
  • Sigrity高速信号仿真之直流压降仿真

    1 简介 本文主要介绍直流压降仿真分析 电源直流压降的仿真 又称电源直流跌落仿真 DC IR Drop 或IR Drop HyperLynx软件中集成了电源完整性电源电压跌落仿真功能 DC Drop Simulation PowerScop
  • 2023 年 IDEA Maven 源修改为国内阿里云镜像的正确方式,亲测可用

    前言 由于众所周知的原因 maven的库在中国大陆非常慢 我在百度上搜到的大部分文章都是直接在 m2 settings xml 加入以下内容
  • Linux_网络项目_WEB服务器 设计CGI机制,与CGI处理数据

    文章紧跟之前web服务器返回静态网页 文章目录 CGI设计思路 设计CGI代码 CGI设计思路 CGI原理如下图 其中CGI程序可以使用任何后端语言进行编写 而服务器是可执行程序 而CGI程序也是可执行程序 可以创建子进程使用进程替换来实现
  • MySQL C API

    Mysql API数据结构 Mysql API中用到了很多结构体等数据类型 下面就简单说说常用的几个数据结构的含义 至于它们的定义鸡啄米就不贴了 大家可以到Mysql提供的mysql h头文件中查看 MYSQL 连接数据库前 必须先创建MY
  • 【小沐学Android】Android实现socket网络通信

    SOCKET网络通信系列文章链接如下 小沐学python 一 Python简介和安装 Python实现socket网络通信 C 实现socket网络通信 Windows Android实现socket网络通信 nodejs实现socket网
  • Opencv立体相机标定

    0 简要 立体相机标定是立体视觉深度测量的重要步骤 相机标定的精度很大程度上决定了深度的精度 因此掌握立体相机的标定算法和过程至关重要 由于相机标定原理可以在网上找到很多相关资料 因此本文不展开讲原理部分 感兴趣的同学可以移步到https
  • MySQL数据库学习——DQL语句的执行顺序

    1 查询年龄大于15的员工的姓名 年龄 并根据年龄进行升序排序 select name age from emp where age gt 15 order by age asc select e name e age from emp e
  • vim/vi常用命令集

    格式 指令 或指令 参数 指令解释 文件操作 vim vi 打开一个空文件 vim vi a txt 打开当前目录中的a txt文件 若文件不存在则创建一个名为a txt的文件 指定保存位置为当前目录 vim vi home a txt 打
  • SpringBoot常用注解

    一 注解 annotations 列表 SpringBootApplication 包含了 ComponentScan Configuration和 EnableAutoConfiguration注解 其中 ComponentScan让sp