SpringBoot的注解总结,这绝对是一篇满满的干货!

注解(Annotations)列表

@SpringBootApplication

SpringBoot的核心注解, 包含了 @ComponentScan、@Configuration 和 @EnableAutoConfiguration 注解。其中 @ComponentScan 让 spring Boot 扫描到 Configuration 类并把它加入到程序上下文。

@Configuration

声明当前类为配置类,相当于 xml 形式的 Spring 配置中的,该注解需要添加到类上。等同于spring 的 XML 配置文件,通过对 bean 对象的操作替代 spring 中 xml 文件。

@SpringBootConfiguration

该注解是@Configuration 注解的派生注解,跟@Configuration注解的功能一致,标注这个类是一个配置类,只不过@SpringBootConfiguration 是 springboot的注解,而@Configuration 是 spring 的注解

@EnableAutoConfiguration

SpringBoot的自动配置注解,它可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器

@ComponentScan

组件扫描,可自动发现和装配一些 Bean,注解在方法上或者注解上,扫描包的注解。

@Component

可以使用此注解描述 Spring 中的 Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean),并且可以作用在任何层次。使用时只需将该注解标注在相应类上即可。(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>

@AutoConfigurationPackage

@AutoConfigurationPackage 注解,自动注入主类下所在包下所有的加了注解的类(@Controller,@Service 等),以及配置类(@Configuration)

@ConfigurationPropertiesScan

@ConfigurationPropertiesScan 扫描配置属性,@EnableConfigurationProperties 注解的作用是使用 @ConfigurationProperties 注解的类生效。

@EnableConfigurationProperties

使用 @ConfigurationProperties 注解的类生效。
如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties 配置文件转化的bean。说白了 @EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入。

@ConfigurationProperties

spring-boot 提供该注解将配置文件的值映射到类上使用。
当我们使用application.properties/yml文件配置Thymeleaf时,就相当于操作Thymeleaf对应的配置文件类中的属性,
当配置spring.thymeleaf.encoding=XXX时就相当于给以下文件中的编码属性赋值。源码中的:
在这里插入图片描述

@AutoConfigureAfter

它是 spring-boot-autoconfigure包下的注解,
其作用顾名思义,就是将一个配置类在另一个配置类之后加载。
例如:

@AutoConfigureAfter (AAAA.class)
public class CCCC {
    
    
}

说明 CCCC 将会在 AAAA 之后加载

@AutoConfigureBefore

同样的,和以上相反。

SpringBoot中的条件判断注解

条件注解 说明
@ConditionalOnJava 系统的java版本是否符合要求
@ConditionalOnBean 当容器里有指定的bean的条件下。
@ConditionalOnMissingBean 当容器里不存在指定bean的条件下。
@ConditionalOnExpression 满足SpEL表达式指定
@ConditionalOnClass 当类路径下有指定类的条件下。
@ConditionalOnMissingClass 当类路径下不存在指定类的条件下。
@ConditionalOnSingleCandidate 容器中只有一个指定的Bean,或者这个Bean是首选Bean
@ConditionalOnProperty 指定的属性是否有指定的值,例如@ConditionalOnProperty(prefix=“xxx.xxx”,value=“enable”,matchlfMissing=ture),代表当xxx.xxx为enable时条件布尔值为true时,如果没有设置的情况下也为true。系统中指定的属性是否有指定的值
@ConditionalOnResource 类路径下是否存在指定资源
@ConditionalOnWebApplication 当前是web环境
@ConditionalOnNotWebApplication 当前不是web环境
@ConditionalOnOnJndi JNDI存在指定项

元注解

@Target

用于描述注解的使用范围(即:被描述的注解可以用在什么地方,比如说在类、方法、构造器、属性等等),ElementType有以下参数类型:

参数类型 范围说明
TYPE 类、接口(包括注释类型)或枚举声明
FIELD 字段声明(包括枚举常量)
METHOD 使用在方法上声明
PARAMETER 参数声明
CONSTRUCTOR 使用在构造器上声明
LOCAL_VARIABLE 使用在局部变量上声明
ANNOTATION_TYPE 使用在注解上声明
PACKAGE 包声明
TYPE_PARAMETER 注解可以用于类型参数声明(JDK1.8)
TYPE_USE 类型使用声明(JDK1.8)

@Retention

表示在什么级别保存该注释信息,用于描述注解的生命周期。(SOURCE<CLASS<RUNTIME)

参数类型 说明
SOURCE Annotation信息仅存在于编译器处理期间,编译器处理完之后就没有该Annotation信息了
CLASS 编译器将Annotation存储于类对应的.class文件中。默认行为
RUNTIME 编译器将Annotation存储于class文件中,并且可由JVM读入

@Document

说明该注解被包含在javadoc中,是否生成文档注释。类和方法的 Annotation 在缺省情况下是不出现在 javadoc 中的。如果使用 @Documented 修饰该 Annotation,则表示它可以出现在 javadoc 中。

定义 Annotation 时,@Documented 可有可无;若没有定义,则 Annotation 不会出现在 javadoc 中。

@Inherited

说明子类可以继承父类中的该注解。使用 @interface 定义注解时,意味着它实现了 java.lang.annotation.Annotation 接口,即该注解就是一个Annotation。

定义 Annotation 时,@interface 是必须的。
注意:它和我们通常的 implemented 实现接口的方法不同。Annotation 接口的实现细节都由编译器完成。通过 @interface 定义注解后,该注解不能继承其他的注解或接口。

Spring配置相关以及注入Bean对象注解

@Import

用来导入其他配置类。注解在类上,引入其他的配置类,类似于bean标签中的ref

@ImportResource

用来加载 xml 配置文件。

@Bean

注解在方法上,声明当前方法的返回值为一个 Bean 对象,该对象会被添加 SpringIOC容器中。和标签作用的相同。Bean 的实例名称由 @Qualifier 注解的参数指定。这个方法的名字就相当于bean标签的id属性,返回值就相当于bean标签中的class属性。

@Value

注入 Spring boot application.properties 配置的属性的值。

@Repository

使用 @Repository 注解可以确保 DAO 或者 repositories 提供异常转译,这个注解修饰的 DAO 或者 repositories 类会被 ComponetScan 发现并配置,同时也不需要为它们提供 XML 配置项。其功能与 @Component 相同。

@Service

通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。

@Controller

通常作用在控制层(如 Spring MVC 的 Controller),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。

@RestController

此注解是 @Controller 和 @ResponseBody 的合集, 表示这是个控制器 bean,并且是将函数的返回值直接填入 HTTP 响应体中,,是 REST 风格的控制器。

@JsonBackReference

解决嵌套外链问题。

@Scope

设置作用域,标注在类上,等价于在配置文件中bean中的作用域配置。
<bean id="person" class="com.oldou.pojo.Person" scope="singleton"/>

Bean对象依赖注入注解

@Inject

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

@Autowired

自动装配,通过类型byType。如果不能唯一自动装配,那么就需要通过@Qualifier(value=“xxx”)

@Qualifier

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

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

@Resource(name=”name”,type=”type”)

没有括号内内容的话,默认 byName。与 @Autowired 干类似的事(自动装配)。

@Nullable

字段标记了这个注解,说明了这个字段允许为null。

SpringMVC相关注解

RequestMapping

@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。
可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

@GetMapping

它是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式,只能处理 Get 类型请求。

@PostMapping

它是@RequestMapping(method =RequestMethod.POST) 的一个快捷方式,只能处理 Post 类型请求。

@PutMapping

@PutMapping 注解是@RequestMapping(method = RequestMethod.PUT)的缩写。

@DeleteMapping

@DeleteMapping 注解是@RequestMapping(method = RequestMethod.DELETE)的缩写。

@RequestParam

将请求参数绑定到控制器的方法参数上.
语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)

@ResponseBody

表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用,用于构建 RESTful 的 api。

@RequestBody

用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)。
@RequestBody 注解可以将 JSON 格式的数据转为 Java 对象。
但是要求 content-type 不是默认的 application/x-www-form-urlcoded 编码的内容。一般情况下来说常用其来处理application/json 类型。

@PathVariable(“xxx”)

获取参数。通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“) ,例如:
@RequestMapping(value=”user/{id}/{name}”)
请求路径:http://localhost:8080/hello/show5/1/james

猜你喜欢

转载自blog.csdn.net/weixin_43246215/article/details/108486849