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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2024年6月23日
下一篇 2020年12月10日

相关推荐

  • Java自学之类与对象

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

    2020年11月25日
    1.4K
  • Java自学之泛型

    在Java语言中,为了方便接收参数类型的统一,提供了核心类Object,利用此类对象可以接收所有类型的数据(包括基本数据类型和引用数据类型)。但是由于其所描述的数据范围过大,所以在…

    2020年12月8日
    1.4K
  • Java自学之类结构扩展

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

    2020年12月10日
    1.4K
  • JAVA学习路线之夯实基础

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

    2020年1月14日
    1.8K
  • Java自学之内部类

    内部类是一种常见的嵌套结构,利用这样的结构使得内部类可以与外部类共存,并且方便地进行私有操作的访问。 内部类基本概念 内部类(内部定义普通类、抽象类、接口的统称)是指一种嵌套的结构…

    2020年12月14日
    1.6K
  • Java自学之反射机制

    重用性是面向对象设计的核心原则。为了进一步提升代码的重用性,Java提供了反射机制。反射技术首先考虑的是“反”与“正”的操作,所谓的“正”操作,是指当开发者使用一个类的时候,一定要…

    2020年12月24日
    1.3K
  • Java自学之I/O编程

    I/O(Input/Output,输入/输出)可以实现数据的读取与写入操作,Java针对I/O操作的实现提供了java.io工具包,此包的核心组成由File类、InputStrea…

    2020年12月21日
    1.3K
  • STS插件mybatis-generator安装及使用

    断断续续学习Java也有好长时间了,没有师傅带,没有项目练手,学习超级慢,也很烦。视频、书籍翻看了一大推,还是没有目标。 相信滴水成海,外加条条大路通罗马,只要坚持,自己终能达成目…

    2019年12月27日
    2.4K
  • JAVA基础知识整理

    终于下定决心2020年转JAVA开发,自学之路坎坷曲折。俗话说的话,好记性不如烂笔头。如果有小伙伴们也像我一样在JAVA自学之路上徘徊,那就关注一下我的博客网站。我会不定期更新一下…

    2020年1月11日
    1.8K
  • spring4.x学习之创建工程

    断断续续学习Java有两三个月了,目前还是处于入门阶段。关于java及spring那些的设计理念方面的理论知识,不花费大量精力及时间是看不懂的(至少对于我这么一个前端转后端的初学者…

    2019年3月19日
    1.9K