Spring全家桶注解概览

Java元注解

注解 解释
@Documented javadoc文档中列出被此注解注解的元素
@Target 注解能被应用的目标元素,比如类、方法、属性、参数等等
@Retention 仅在源码保留,还是保留到编译后的字节码,还是到运行时也去加载
@Inherited 如果子类没有定义注解的话,能自动从父类获取定义了继承属性的注解
@Repeatable 通过关联注解容器定义可重复注解
@Native 是否在.h头文件中生成被标记的字段,原生程序需要和Java程序交互

SpringCore 注解

注解 解释
@Controller 定义表现层组件
@Service 定义业务逻辑层组件
@Repository 定义数据访问层资源库组件
@Component 定义其它组件(比如访问外部服务的组件)
@Autowired 自动装配Bean(默认按类型装配byType
@Required 用于在setter方法标记属性值需要由Spring进行装配
@Qualifier 用于通过给Bean定义修饰语来注入相应的Bean
@Resource 自动装配Bean(默认按照名称进行装配byName
@Value 用于注入属性配置或SpEL表达式
@Lookup 可以实现方法注入(注入的对象是Prototype生命周期,每次new一个出来)
@EnableTransactionManagement 用于开启事务管理
@Transactional 用于开启事务以及设置传播性、隔离性、回滚条件等
@TransactionalEventListener 用于配置事务的回调方法(事务提交前、提交后、完成后,回滚后)
@Order 注解可以设置Spring管理对象的加载顺序
@AliasFor 注解可以设置一组注解属性相互作为别名

SpringContext 注解

注解 解释
@Configuration 用于标注配置类,启用Java配置方式的Bean配置
@Bean 用于配置一个Bean
@ComponentScan 用于扫描包方式配置Bean
@ComponentScans 用于配置一组@ComponentScan
@PropertySource 用于导入配置文件
@PropertySources 用于配置一组@PropertySource
@Conditional 用于设置关联的条件类,在合适的时候启用Bean的配置
@Import 用于导入其它配置类
@ImportResource 用于导入非Java配置方式的XML配置
@Profile 用于指定在合适的Profile下启用配置
@Lazy 用于告知容器延迟到使用的时候实例化Bean(默认情况下容器启动的时候实例化Bean来检查所有的问题)
@Description 用于给Bean设置描述
@Scope 用于设置Bean的生命周期
@Primary 用于在定义了多个Bean的时候指定首选的Bean
@EventListener 用于设置回调方法监听Spring制定的以及自定义的各种事件
@EnableAspectJAutoProxy 用于开启支持AspectJ@Aspect切面配置支持

SpringMVC 注解

注解 解释
@RequestScope Bean特殊生命周期的复合注解(需要Bean跟随请求声明周期)
@SessionScope Bean特殊生命周期的复合注解(需要Bean跟随会话声明周期)
@ApplicationScope Bean特殊生命周期的复合注解(需要Bean跟随应用程序的声明周期)
@RequestMapping 用于配置Http请求路径参数等,手动配置HttpMethod
@PostMapping 基于@RequestMapping的复核注解,HTTPPOST请求
@GetMapping 基于@RequestMapping的复核注解,HTTPGET请求
@DeleteMapping 基于@RequestMapping的复核注解,HTTPDELETE请求
@PutMapping 基于@RequestMapping的复核注解,HTTPPUT请求
@ResponseStatus 可用到方法或异常上,请求得到响应代码
@ExceptionHandle 可用到方法或异常上,请求得到异常原因,可以进行统一的全局异常处理
@ResponseBody 把返回内容(序列化后)输出到请求体,@RestController常用
@RequestBody 从请求体获取参数(处理复杂数据,比如JSON
@RequestHeader 从请求头获取参数获取参数
@CookieValue cookie中获取参数
@SessionAttribute 从会话中获取参数
@RequestAttribute 从请求的Attribute中(过滤器和拦截器手动设置的一些临时数据)
@RequestParam 从请求参数(处理简单数据,键值对)
@PathVariable 从路径片段中获取参数
@MatrixAttribute 矩阵变量允许我们采用特殊的规则在URL路径后加参数(分号区分不同参数,逗号为参数增加多个值)
@ControllerAdvice 允许我们在集中的地方配置控制器,相当于为@ExceptionHandler加上了@ResponseBody
@RestControllerAdvice @ControllerAdvice类似
@InitBinder 用来设置WebDataBinderWebDataBinder用来自动绑定前台请求参数到Model
@ModelAttribute 让全局的@RequestMapping都能获得在此处设置的键值对
@CrossOrigin 用到@ControllerMethod上(需要配合@RequestMapping)设置细粒度的跨域行为

SpringBoot 注解

注解 解释
@ConfigurationProperties 配合@EnableConfigurationProperties注解来设置需要启用的配置类,用来自定义配置类和配置文件进行关联
@EnableConfigurationProperties 启动自定义配置
@DeprecatedConfigurationProperty 用于标记废弃的配置以及设置替代配置和告知废弃原因
@ConfigurationPropertiesBinding 用于指定自定义的转换器用于配置解析的时的类型转换
@NestedConfigurationProperty 用于关联外部的类型作为嵌套配置类
@EnableAutoConfiguration 可以启用自动配置
@SpringBootApplication 复合注解,SpringBoot启动注解
@AutoConfigureOrder 用于设置自动配置类加载顺序,以及精确控制加载依赖关系(值越小优先级越高)
@AutoConfigureAfter 在指定的配置类初始化后再加载
@AutoConfigureBefore 在指定的配置类初始化前加载
@ConditionalOnBean 用于仅当容器中已经包含指定的Bean类型或名称时才匹配条件
@ConditionalOnClass 仅当classpath上存在指定类时条件匹配
@ConditionalOnCloudPlatform 仅当指定的云平台处于活动状态时条件匹配
@ConditionalOnExpression 依赖于SpEL表达式的值的条件元素的配置注解
@ConditionalOnJava 基于应用运行的JVM版本的条件匹配
@ConditionalOnJndi 基于JNDI可用和可以查找指定位置的条件匹配
@ConditionalOnMissingBean 仅当容器中不包含指定的Bean类型或名称时条件匹配
@ConditionalOnMissingClass 仅当classpath上不存在指定类时条件匹配
@ConditionalOnNotWebApplication 仅当不是WebApplicationContext(非Web项目)时条件匹配
@ConditionalOnWebApplication 仅当是WebApplicationContextWeb项目)时条件匹配
@ConditionalOnProperty 是检查指定的属性是否具有指定的值
@ConditionalOnResource 示仅当classpath上存在指定资源时条件匹配
@ConditionalOnSingleCandidate 仅当容器中包含指定的Bean类并且可以判断只有单个候选者时条件匹配
@Conditional 关联到自己实现的SpringBootCondition

SpringCloud 注解

注解 解释
@EnableXXX 开启某个功能
@RibbonClient 这个注解用来为负载均衡客户端做一些自定义的配置
@SpringCloudApplication 复合注解,SpringCloud启动注解
@LoadBalanced 用于和RestTemplate配合使用构成一个负载均衡的Http客户端,实现原理上其实这个注解是一个@Qualifier注解
@SpanName 手动设置span的名称

  1. 元注解,也就是注解的注解
  2. Spring容器相关的一些注解,包括@Qualifier@AliasFor@Order等看似不重要但其实很重要的注解
  3. SpringJava配置相关的一些注解,包括条件注解
  4. SpringBoot自动配置相关的一些注解
  5. 很多注解可以同时应用到类型、方法、参数上,有的时候应用到不同的地方作用会略微不一样,这个需要重点关注

参考文献

朱晔和你聊Spring系列S1E9:聊聊Spring的那些注解

今日诗词

作者信息