Spring Boot的常用注解

未来的框架趋势是“约定大于配置”,代码的封装会更加严密。开发人员会将更多的精力放在代码的整体优化和业务逻辑上,所以注解式编程会被更加广泛地使用。那么什么是注解?Spring Boot的常用注解有哪些?

什么是注解?

注解(annotations)是来定义一个类、属性或一些方法,以便程序能被编译处理。它相当于一个说明文件,告诉应用程序某个被注解的类或属性是什么,要怎么处理。注解可以用于标注包、类、方法和变量等。比如在《初识Spring Boot》一文中新建工程中的HelloWorldController类文件标注HelloWorldController类使用的@RestController注解。

@RestController
public class HelloWorldController {
  ……
}

常用注解

使用在类名上的注解

@RestController

它用于返回JSON、XML等数据,但不能反悔HTML页面。相当于注解@ResponseBody和@Controller合在一起的作用。

@Controller

它用于标注控制器层,在MVC开发模式中代表C(控制器)。所以@Controller主要用于构建MVC模式的程序。

以下两段代码是等效的。

@RestController
public class Demo{
  @RequestMapping("/demoUrl")
  public String Hello() throws Exception {
    return "Hello World!";
  }
}
@Controller
public class Demo{
  @RequestMapping("/demoUrl")
  @ResponseBody
  public String Hello() throws Exception {
    return "Hello World!";
  }
}

@Service

它用于声明一个业务处理类(实现非接口类),用于标注服务层,处理业务逻辑。

比如,想要处理关于产品的一些功能(增删改查)

/**
* Description: 实现处理关于产品的功能
*/
@Service
public class ProductServiceImpl implements ProductService {
  ……
}

@Repository

它用于标注数据访问层,即DAO层(也有叫Mapper层)。它表示一个仓库,主要用于封装对于数据库的访问。换句话说,@Repository注解修饰哪个类表明这个类具有对数据库CRUD的功能,用在持久层的接口上。

比如,通过产品名称,查找某个产品。

@Repository
public interface ProductRepository {
  ProductEntity findProductByProductName(String productName)
}

@Component

它用于把普通POJO(Plain Ordinary Java Objects,简单的Java对象)实例化到Spring容器中,当类不属于注解@Controller和@Service等时,就可以使用注解@Component来标注这个类。它可配合CommandLineRunner使用,以便在程序启动后执行一些基础任务。

@Configuration

它用于标注配置类,并且可以由Spring容器自动处理。它作为Bean(Bean,指任何被 Spring 加载生成出来的对象)的载体,用来指示一个类声明、一个或多个@Bean方法,在运行时为这些Bean生成BeanDefinition和服务请求。

@Resource

它用于装配Bean,也可以写在字段上或Setter方法上。

public class DemoController {
  @Resource
  private ProductRepository productRepository;

  ……
}

@Autowired

它表示被修饰的类需要注入对象。Spring会扫描所有被@autowired标注的类,然后根据类型在IoC容器中找到匹配的类进行注入。被@Autowired注解后的类不需要再导入文件。

@RequestMapping

它用来处理请求地址映射,用在类或方法上。如果用在类上,则表示类中的所有响应请求的方法都是以该地址作为父路径的。该注解有6个属性。

  • Params:指定Request中必须包含某些参数值,才让该方法处理。
  • Headers:指定Request中必须包含某些指定的header值,才能让该方法处理请求。
  • Value:指定请求的实际地址,指定的地址可以是URI Template模式。
  • Method:指定请求的Method类型,如GET、POST、PUT、DELETE等。
  • Consumes:指定处理请求的提交内容类型Content-Type,如“application/json,text/html”。
  • Produces:指定返回的内容类型。只有当Request请求头中的Accept类型中包含该指定类型时才返回。

@Transactional

它可以用在接口、接口方法、类及类方法上。

但Spring不建议在接口或者接口方法上使用该注解,因为该注解只有在使用基于接口的代理时才会生效。如果异常被捕获(try { } catch { })了,则事务就不回滚了。如果想让事务回滚,则必须再往外抛出异常(try { } catch { throw Exception })。

@Qualifier

它的意思是“合格者”,用于标注哪一个实现类才是需要注入的。需要注意的是,@Qualifier的参数名称为被注入的类中的注解@Service标注的名称。

@Qualifier常和@Autowired一起使用,如以下代码:

@Autowired
@Qualifier("productService")

@EnableAutoConfiguration

可用在入口类或普通类类名上,用来提供自动配置。

@SpringBootApplication

常用在入口类上,用来启动入口类Application。

@EnableScheduling

可用在入口类或普通类类名上,用来开启计划任务。Spring通过@Scheduled支持多种类型的计划任务,包含cron、fixDelay、fixRate等。

@EnableAsync

可用在入口类或者普通类类名上,用来开启异步注解功能。

@ComponentScan

可用在入口类或普通类类名上,用来扫描组件,可自动发现和装配一些Bean。它根据定义的扫描路径,把符合扫描规则的类装配到Spring容器中,告诉Spring哪个包(package)的类会被Spring自动扫描并且装入IoC容器。它对用XML配置中的元素。可以通过basePackages等属性来细粒度地定制自动扫描的范围,默认会从声明@ComponentScan所在类的包进行扫描。

@Aspec

可用在入口类或普通类类名上,标注切面,可以用来配置事物、日志、权限验证,在用户请求时做一些处理等。

@ControllerAdvice

用在普通类类名上,包含@Component,可以被扫描到。统一处理异常。

使用在方法上的注解

@RequestBody

常用来处理application/json、application/xml等Content-Type类型的数据,意味着HTTP消息是JSON/XML格式,通过@RequestBody将请求体中的字符串绑定到相应的Bean上,也可以将其分别绑定到对应的字符串上。

@RequestMapping("/post")
public void demoPost(@RequestBody String name) {
  system.out.print("接收到的name参数值为:",name)
}

@PathVariable

用于获取路径中的参数

@Bean

它代表产生一个Bean,并交给Spring管理。用于封装数据,一般有Setter、Getter方法。在MVC模型中,对应的是M(模型层)

@ResponseBody

它的作用是通过转换器将控制器中方法返回的对象转换为指定的格式,然后写入Response对像的body区。它常用来返回JSON/XML格式的数据。使用此注解后,数据直接写入输入流中,不需要进行视图渲染。

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/java/spring-boot-common-annotations.html

Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
Previous 2024年6月23日
Next 2020年7月14日

相关推荐

  • Java自学之类与对象

    定义 类是由成员属性和方法组成。成员属性主要定义类的一个具体信息,实际上一个成员属性就是一个变量,而方法是一些操作的行为。类的定义基础语法如下。 一个类定义完成后并不能够被直接使用…

    2020年11月25日
    1.2K
  • Java自学之String类

    在实际项目开发中,String是一个必须使用的程序类,可以说是项目的核心组成类。在Java程序里所有的字符串都要求使用【’‘】进行定义,同时也可以利用【+】实现字符串的连接处理。 …

    2020年11月30日
    1.3K
  • Java自学之多线程编程

    多线程编程是Java语言最为重要的特性之一。利用多线程技术可以提升单位时间内的程序处理性能,也是现代程序开发中高并发的主要设计模式。 进程与线程 进程是一个应用程序。线程是一个进程…

    2020年12月16日
    1.4K
  • JavaWeb入门案例之用户注册

    前言 之前把Java的基础知识系统的过了一遍,目前总算可以看懂Java代码了,接下来就是要学习Java开发框架(主要是springMVC)。 下面用一个用户注册的小案例,来总结一下…

    2021年1月13日
    1.5K
  • spring boot练习篇之用户登录系统【接入数据库】

    抛弃JSP,只做纯粹的前后端分离项目。 写在前面 学习基础知识是枯燥无味的,之所以会这样,多数是因为心不静,对于如何运用它,感到茫然。所以建议大家在学习Java基础知识的时候,一定…

    2021年5月28日
    1.2K
  • Java自学之类结构扩展

    面向对象中的核心组成是类与接口,在项目中会利用【包】进行一组相关类的管理,这样适合于程序代码的部分更新,也更加符合面向对象封装性的概念,同时合理地使用封装也可以方便地实现实例化对象…

    2020年12月10日
    1.2K
  • servlet学习之获取表单数据(IDEA2020.2篇)

    首先,创建一个servlet工程。 如果你不会用IDEA2020.2创建servlet工程,请打开下面链接浏览网站博文。 https://www.edu24.cn/course/j…

    2020年9月8日
    1.3K
  • JAVA学习之多线程知识点整理

    1、什么是进程?什么是线程? 进程是一个应用程序。线程是一个进程中的执行场景或者执行单元。一个进程可以启动多个线程。进程之间内存独立不共享。同一个进程中的线程之间,堆内存和方法区内…

    2020年6月19日
    1.2K
  • JAVA学习路线之夯实基础

    第一章 开发环境 JDK(Java SE Development Kit),Java标准版开发包,提供编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环…

    2020年1月14日
    1.5K
  • Java自学之继承

    在面向对象的设计过程中,类是基本的逻辑单位。但是对于这些基本的逻辑单位需要考虑到重用的设计问题,所以在面向对象的设计里提供有继承,并利用这一特点实现类的可重用性定义。 类继承定义 …

    2020年12月3日
    1.3K