Spring+Spring Boot+Spring Cloud常用注解总结
一. Spring
注解介绍:
由于Spring 和Spring boot中有许多注解基本通用,所以在Spring中介绍过的注解就不会再次介绍了。如有需要,可以自行查看哦~
- @Component
指项目中的组件,@Controller(控制层)、@Service(业务层)、@Repository(数据访问层)都可以称为@Component。
- @Bean
Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后返回一个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中;添加的bean的id为方法名;比如@Autowired , @Resource,可以通过byTYPE(@Autowired) ,byNAME(@Resource) 的方式获取Bean;
- @Import(要导入到容器中的组件);
- @Autowired
@Autowired 用来获取注入Bean. 可以作用在变量、setter方法、构造函数上;有个属性为required,可以配置为false,找不到Bean也不会报错
@Autowired
private FileService fileService;
- @Resource
@Resource,按照名称匹配的,作用与@Autowired类似。
- @Configuration
声明当前类为配置类;
- @ComponentScan
用于对Component进行扫描;
- @Aspect 声明一个切面
- @Value
三种用法:
-
${}是去找外部配置的参数,将值赋过来
-
#{}是SpEL表达式,去寻找对应变量的内容
-
#{“xxxx”}直接写字符串就是将字符串的值注入进去
- @EnableAsync
配置类中通过此注解开启对异步任务的支持;
- @Scheduled
来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)
- Enablexxx注解
@EnableAspectAutoProxy:开启对AspectJ自动代理的支持;
@EnableAsync:开启异步方法的支持;
@EnableScheduling:开启计划任务的支持;
@EnableWebMvc:开启web MVC的配置支持;
@EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持;
@EnableJpaRepositories:开启对SpringData JPA Repository的支持;
@EnableTransactionManagement:开启注解式事务的支持;
@EnableCaching:开启注解式的缓存支持;
- @SuppressWarnings
告诉它对被批注的代码元素内部的某些警告保持静默。
- @RequestMapping
用在类上居多。是用来处理请求地址映射的注解,放在方法上表示所有请求方法都是以该地址为父路径。
参数:value(“xxx/xxx”)指定请求实际地址。
@RequestMapping("/admin/vod/file")
params当包含指定参数值才处理
- @ResponseBody
表示该方法的返回结果直接写入HTTP response body中一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
- @RequestBody
允许request的参数在request体中,而不是在直接连接的地址后面。
eg:(@RequestBody CourseFormVo courseFormVo)
- @PathVariable
用于接收路径参数,比如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值,通常作为Restful的接口实现方法。
eg:@RequestMapping(“/hello/{name}”)
public String getName(@PathVariable String name){}
- @RestController
该注解为一个组合注解,相当于 @Controller 和 @ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。
- @ControllerAdvice
统一处理异常,包含@Component,可以被扫描到
- @ModelAttribute
(1)@ModelAttribute注释方法
如果把@ModelAttribute放在方法的注解上时,代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法。可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。比如权限的验证(也可以使用Interceptor)等。在同一个控制器中,注解了@ModelAttribute
的方法实际上会在@RequestMapping
方法之前被调用。如果 @ModelAttribute 和 @RequestMapping 注解在同一个方法上,那么代表给这个请求单独设置 Model 参数。此时返回的值是 Model 的参数值,而不是跳转的地址。
(2)@ModelAttribute注释一个方法的参数
当作为方法的参数使用,指示的参数应该从模型中检索。如果不存在,它应该首先实例化,然后添加到模型中,一旦出现在模型中,参数字段应该从具有匹配名称的所有请求参数中填充。Spring MVC中被称为数据绑定,数据绑定之后,可以使用 BindingResult
来返回数据验证结果。
- @Transactional
当类级别配置了@Transactional,方法级别也配置了@Transactional,应用程序会以方法级别的事务属性信息来管理事务,换言之,方法级别的事务属性信息会覆盖类级别的相关配置信息。
eg:@Transactional(propagation=Propagation.SUPPORTS,readOnly=true)
- @Schema
@schema注解标注在class上,表示此类对应的数据库表对应的schema。
- @JsonIgnoreProperties
此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
二. Spring Boot
- @Configuration
指出该类是 Bean 配置的信息源,相当于XML中的,一般加在主类上。
- @EnableAutoConfiguration
让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上。
- @SpringBootApplication
相当于以下三个注解的结合,一般用在启动类@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
- @ImportResource
将资源导入容器
- @PropertySource
导入properties文件
- @Role
bean角色定义为ROLE_APPLICATION(默认值)、ROLE_SUPPORT(辅助角色)、ROLE_INFRASTRUCTURE(后台角色,用户无感)
- @Lazy
使bean懒加载,取消bean预初始化
- @Lookup
在容器中选出与方法返回的类型相同类型
- @Autowired
默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。(一般项目使用默认类型即可)
- @Qualifier
申明bean名字,且可以按bean名字加载bean
- @Description
添加bean的文字描述
- @EnableAspectConfiguration
启动AspectJ自动配置(AOP)
- @AutoConfigureOrder
指定配置类初始化顺序,越小初始化越早
- @Conditional,当指定的条件都满足时,组件才被注册
- @ConditionalOnResource,指定resources都在classpath上才注册配置
- @ConditionalOnWebApplication,是在web环境才注册配置
- @ConditionalOnMissingBean,指定bean不在上下文中时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型
- @EnableCaching,开启缓存配置,支持子类代理或者AspectJ增强
- @CacheConfig,在一个类下,提供公共缓存配置
- @CacheEvict,删除缓存
- @CachePut,每次先执行方法,再将结果放入缓存
- @EnableScheduling,开启定时任务功能,一般放在启动类
- @ConfigurationProperties,将properties文件里的内容,自动注入bean对应的属性中
- @EnableConfigurationProperties,启动@ConfigurationProperties功能
- @Entity ,@Table(name=“”)
一般用于entity类中,对应数据库中类表名
表明这是一个实体类,一般用于jpa,这两个注解一块使用,但是如果表名和实体类名相同的话,@Table可以省略。
- @Id:用在属性上,表明该属性为主键
- @Basic
是实体类与数据库字段映射时最简单的类型。类型支持Java基本类型(byte、short、int、long、float、double、char、boolean),包装类,枚举类,以及实现了serializable接口的类型。属性fetch有两个选项EAGER(即时加载,默认值)和LAZY(懒加载)
三.Spring Cloud
- @EnableEurekaServer
用在springboot启动类上,表示这是一个eureka服务注册中心;
- @EnableDiscoveryClient
用在springboot启动类上,表示这是一个服务,可以被注册中心找到;
常用Nacos作为注册中心
- @LoadBalanced
开启负载均衡能力;常用Nginx作为负载均衡工具
- @EnableCircuitBreaker
用在启动类上,开启断路器功能;
- @HystrixCommand(fallbackMethod=”backMethod”)
用在方法上,fallbackMethod指定断路回调方法;
- @EnableConfigServer
用在启动类上,表示这是一个配置中心,开启Config Server;
- @EnableZuulProxy
开启zuul路由,用在启动类上;
- @SpringCloudApplication
- @SpringBootApplication
- @EnableDiscovertyClient
- @EnableCircuitBreaker
分别是SpringBoot注解、注册服务中心Eureka注解、断路器注解。对于SpringCloud来说,这是每一微服务必须应有的三个注解,所以才推出了@SpringCloudApplication这一注解集合。
- @ConfigurationProperties
Spring源码中大量使用了ConfigurationProperties注解,比如server.port就是由该注解获取到的,通过与其他注解配合使用,能够实现Bean的按需配置。
该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上。
@ConfigurationProperties 和 @value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便;
- @FeignClient注解
远程调用项目下不同微服务的远程调用;@FeignClient标签的常用属性如下:name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现url: url一般用于调试
- @CrossOrigin
可以处理跨域请求,让你能访问不是一个域的文件
- @ApiOperation
首先@ApiOperation注解不是Spring自带的,它是是swagger里的注解
是用来构建Api文档的@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”;
- @EnableFeignClients 开启Spring Cloud Feign的支持
- @RibbonClient,这个注解用来为负载均衡客户端做一些自定义的配置,可以进一步配置或自定义从哪里获取服务端列表、负载均衡策略、Ping也就是服务鉴活策略等等
四. Lombok
- @Data
注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
- @Setter :注解在属性上;为属性提供 setting 方法
- @Getter :注解在属性上;为属性提供 getting 方法
- @Log4j
注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
- @Synchronized : 加个同步锁
- @SneakyThrows : 等同于try/catch 捕获异常
- @Value
注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。
-
@NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
-
@AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
最后,感谢CSDN两位大佬文章参考,本文仅供学习参考,如愿查看更详细总结,请查看链接:
哪吒总结: [https://blog.csdn.net/guorui_java/article/details/107379648]
白大锅总结