- Spring Boot从入门到精通
- 明日科技编著
- 1308字
- 2024-12-24 10:48:50
3.1 注解
在程序开发的过程中,注解是无处不在的。但是,注解又不是必需的;换言之,在不使用注解的情况下,也能够开发程序。只不过,掌握注解能够帮助程序开发人员深入理解框架,进而提高程序开发的效率。那么,什么是注解呢?注解的作用又有哪些呢?
3.1.1 注解的概念及其应用
在给出注解的概念之前,须明确什么是元数据。所谓元数据,指的是用于描述数据的数据。下面结合某个配置文件里的一行信息,举例说明什么是元数据。
<string name="app_name">AnnotionProject</string>
上述信息中的数据“app_name”是用于描述数据AnnotionProject的。也就是说,数据“app_name”就是元数据。那么,什么是注解呢?注解又被称作标注,是一种被加入源码的具有特殊语法的元数据。需要特别说明的是:
注解仅仅是元数据,和业务逻辑无关。
虽然注解不是程序本身,但是可以对程序做出解释。
应用程序中的类、方法、变量、参数、包等程序元素都可以被注解。
理解了“什么是注解”后,再来了解一下在应用程序中注解的应用体现在哪些方面:
在编译时进行格式检查。例如,如果被@Override标记的方法不是父类的某个方法,编译器就会报错。
减少配置。依据代码的依赖性,使用注解替代配置文件。
减少重复工作。在程序开发的过程中,通过注解减少对某个方法的调用次数。
3.1.2 Spring Boot的常用注解及其标注位置
Spring Boot是一个支持海量注解的框架,其自带的常用注解如表3.1所示。关于这些注解的具体用法,会在本书后面的章节中予以详细介绍。
表3.1 Spring Boot的常用注解
这些注解的编码位置是非常灵活的。当注解用于标注类、成员变量和方法时,注解的编码位置既可以在成员变量的上边,例如:
@Autowired private String name;
又可以在成员变量的左边,例如:
@Autowired private String name;
在Spring Boot的常用注解中,需特别说明的是,使用@RequestParam能够标注方法中的参数。例如:
@RequestMapping("/user") @ResponseBody public String getUser(@RequestParam Integer id) { return "success"; }
3.1.3 使用@SpringBootApplication标注启动类
使用注解能够启动一个Spring Boot项目,这是因为在每一个Spring Boot项目中都有一个启动类(主类),并且启动类必须被@SpringBootApplication注解标注,进而能够调用用于启动一个Spring Boot项目的SpringApplication.run()方法。
在第2章中编写的第一个Spring Boot项目中,com.mr包下的MyFirstSpringBootProjectApplication类就是该项目的启动类,其代码如下:
package com.mr; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplicatio public class MyFirstSpringBootProjectApplication { public static void main(String[] args) { SpringApplication.run(MyFirstSpringBootProjectApplication.class, args); } }
@SpringBootApplication注解虽然重要,但使用起来非常简单,因为这个注解是由多个功能强大的注解整合而成的。打开@SpringBootApplication注解的源码可以看到它被很多其他注解标注,其中最核心的3个注解分别是:
@SpringBootConfiguration注解:让项目采用基于Java注解的配置方式,而不是传统的XML文件配置。当然,如果程序开发人员写了传统的XML配置文件,Spring Boot也是能够读取这些XML文件并识别里面的内容的。
@EnableAutoConfiguration注解:开启自动配置。这样Spring Boot在启动时就可以自动加载所有配置文件和配置类了。
@ComponentScan注解:启用组件扫描器。这样项目才能自动发现并创建各个组件的Bean,包括Web控制器(@Controller)、服务(@Service)、配置类(@Configuration)和其他组件(@Component)。
注意
一个项目可以有多个启动类,但这样的代码毫无意义。一个项目应该只使用一次@SpringBootApplication注解。
@SpringBootApplication有一个使用要求:只能扫描底层包及其子包中的代码。底层包就是启动类所在的包。如果启动类在com.mr包下,其他类应该写在com.mr包或其子包中,否则无法被扫描器找到,就等同于无效代码。例如在图3.1和图3.2中,Controller类所在的位置可以被扫描到。而在图3.3和图3.4中,Controller类的位置就无法被扫描到了。
图3.1 Controller类在com.mr的子包中
图3.2 Controller类与启动类在同一个包中
图3.3 Controller类不在com.mr的子包中
图3.4 Controller类不在任何包中