常用注解
in JavaDevelop with 0 comment

常用注解

in JavaDevelop with 0 comment

常用注解


IOC

@Configuration 标识当前类是配置类, 将当前的类,交给Spring容器管理, 对象的创建是由Spring通过反射机制自动创建对象.

@ComponentScan 包扫描注解 扫描注解, ComponentScan(“com.jt”)指定扫描的包路径, 可以扫描它的子孙包,用在配置类中

@Bean 标识该方法的返回值交给Spring容器管理

@Scope 控制多例和单例, @Scope(“prototype”)表示多例对象, @Scope(“singleton”)表示单例对象

@Lazy 懒加载,只能控制单例模式,多例模式都是懒加载

@PostConstruct 初始化方法, 在对象创建之后立即调用

@PreDestroy 销毁方法, 对象消亡时 进行调用

@Import 只能用在类上 ,@Import通过快速导入的方式实现把实例加入spring的IOC容器中,可以用于导入第三方包,语法@Import({ 类名.class , 类名.class… })


DI

@Data lombok动态生成get/set/toString/equals/hashcode等方法

@Accessors 控制是否开启链式加载结构, 如@Accessors(chain = true)
该注解设置chain=true,生成setter方法返回this(也就是返回的是对象),代替了默认的返回void。
可以使用来链式的set, 如User user=new User().setAge(31).setName(“pollyduan”);

@NoArgsConstructor 生成无参构造方法

@AllArgsConstructor 生成全参构造方法

@Component 将当前类未来的对象交给容器管理—@Component(“userService”) 万用注解

@Autowired 按照类型进行注入已有的bean, 如果注入的类型是接口,则自动的查找其实现类对象进行注入,
注意事项: 一般spring框架内部的接口都是单实现,特殊条件下可以多实现
重要前提: 如果需要依赖注入.则对象必须交给Spring容器管理.

@Autowired(required = false) 注入失败。当我们加上参数(required=false)就能解决

@Qualifier 按照名称进行注入------@Qualifier(“userDao”) 根据属性的名称进行注入—必须和@Autowired同时使用

@Resource(type = “xxx.class”,name=“属性名称”) 根据属性和类型进行注入

@Value 为属性赋值 @Value(“${key}”)


Spring中常用注解

@Repository 标识持久层注解, Spring家族下持久层名称都叫Repository

@Service 标识Service层

@Controller 标识Controller层, 负责处理由 DispatcherServlet 分发的请求

@component: 标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中)

@RestController 表示Controller类,同时要求返回值为JSON, 相当于在每一个方法上面都添加了一个@ResponseBody

@PropertySource 加载指定路径的配置文件properties,如@PropertySource(“classpath:/user.properties”)


SpringBoot中常用注解

@SpringBootTest 标记此类是Spring Boot的测试类,会自动加载项目中的环境,例如Spring环境等

@SpringBootApplication 标记此类是Spring Boot的应用程序类,也是启动类,也是配置类,每个Spring Boot工程中只能有1个类添加此注解

@SpringBootConfiguration 标记此类是Spring Boot的配置类


元注解

@Target({ElementType.TYPE}) 标识注解对谁有效 type:类 method:方法有效

@Retention(RetentionPolicy.RUNTIME) 运行期有效(大)

@Documented 该注解注释编译到API文档中.


AOP

@Aspect 标识当前类是一个切面类

@Pointcut 用于定义切入点表达式 表达式写法4种-------如 @Pointcut(“bean(userServiceImpl)”)

@EnableAspectJAutoProxy 让AOP的注解有效果, 启动AOP注解 创建代理对象, 默认启用JDK动态代理,
目标对象没有实现接口时,则采用CGLIB, 强制使用cglib proxyTargetClass=true,
JDK代理创建速度快.运行时稍慢, CGLIB创建时速度较慢,运行时更快

@Before AOP-前置通知----如@Before(“pointcut()”)

@AfterReturning AOP-后置通知------如@AfterReturning(value = “pointcut()”,returning = “result”),

@AfterThrowing AOP-异常通知--------如@AfterThrowing(value = “pointcut()”,throwing = “exception”)

@After AOP-最终通知

@Around AOP-环绕通知

@Order(1) //可以利用order关键字 实现AOP的排序 数字越小越先执行.


Spring MVC

@ResponseBody 将返回的数据转化为JSON串, 如果是字符串本身 原数据返回, 用于将 Controller 方法返回的对象,
通过适当的 HttpMessageConverter 转换为指定格式后,写入到 Response 对象的 body 数据区-----可以通过返回值的方式给客户端响应数据

@RequestMapping(“/hello”) 实现浏览器的请求路径与方法的映射

@RequestParam 主要用于在 Spring MVC 后台控制层获取参数,类似一种是 request.getParameter(“name”)

@PathVariable restFul结构,接收参数的注解------用来将请求 URL 中的模板变量映射到功能处理方法的参数上
添加在处理请求的方法的参数之前,仅当在请求路径中使用占位符匹配变量值时使用,
如果占位符中的名称与方法参数名称不同,还可以配置此注解的参数,以指定占位符中的名称

@RequestHeader 可以把请求的 header 部分的值映射到方法的参数上

@CookieValue 可以把请求的 Cookie 数据映射到方法的参数上。它的属性与 @RequestParam 一样

@SessionAttributes 允许有选择地指定 Model 中的哪些属性需要转存到 HttpSession 对象中。
只能用于类上,不能用于方法上

@ModelAttribute 将请求参数绑定到 Model 对象。
主要有两种使用方式,一种是注解在方法上,一种是注解在 Controller 方法参数上

@GetMapping(“”) 只能接收GET请求类型

@DeleteMapping(“”) 只能接收DELETE请求类型

@PostMapping(“”) 只能接收POST请求类型

@PutMapping(“”) 只能接收PUT请求类型

@CrossOrigin 允许跨域访问

@RequestBody 参数接收时,将JSON串转化为java对象 json中的key与对象的属性一致.当客户端发出post请求并且提交的是自定义对象时.
服务器端接收参数必须使用此注解, 否则得不到传递过来的参数.

@EnableWebMvc 添加在Spring MVC配置类上的注解,当响应正文,且响应的是JSON格式的结果时,必须添加此注解,否则将导致406错误,另外,在Spring Boot项目中不需要手动添加

@ExceptionHandler 添加在处理异常的方法之前,可通过注解参数配置需要处理的异常类型

@ControllerAdvice 添加在类之前,此类中的代码在处理任何请求时都会生效

@RestControllerAdvice 等效于@ControllerAdvice + @ResponseBody

@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”) 处理前后端的时间转换


MyBatis

@Mapper mybatis将当前的接口交给Spring容器管理. Map<类名小写,JDK动态代理对象>

@SpringBootTest 该注解的作用在进行代码测试时启动spring容器,之后动态的获取对象 注意包路径 主启动类的同包及子包中.

@Param Mybatis中将参数封装为Map集合. @Param(“maxAge”) int maxAge

@Alias Mybatis中定义对象的别名 @Alias(“User”)

@MapperScan Mybatis中扫描指定包路径的接口 为其创建代理对象.

@Insert Mybatis 新增操作注解-----如@Insert(“INSERT INTO USER VALUES(NULL,#{username},#{password},#{phone},#{email},#{status},#{created},#{updated})”)

@Update Mybatis 修改操作注解-------如@Update(“update user set phone=#{phone},email=#{email},updated=now() where id=#{id}”)

@Delete Mybatis 删除操作注解---------如@Delete(“delete from user where id=#{id}”)

@Select Mybatis 查询操作注解---------如@Select(“select count(1) from user”)

@Result(column = “sale_count”,property = “saleCount”) 数据库字段名与实体类对应的属性名不一致时,可以使用@Results映射来将其对应起来。
column为数据库字段名,porperty为实体类属性名,jdbcType为数据库字段数据类型,id为是否为主键。

@Transactional Spring中用来控制事务

@RestControllerAdvice Controller层的全局异常处理

@ExceptionHandler 按照某种异常类型进行拦截


MybatisPlus

@TableName(“item_cat”) MybatisPlus注解POJO与数据表绑定 注意表名,当表名与实体类名不一致时,可以在实体类上加入@TableName()声明

@TableId(type = IdType.AUTO) MybatisPlus注解 标识主键/主键自增

@TableField(exist = false) MybatisPlus注解 标识属性是否存在,及名称是否一致,当实体类属性与表字段不一致时,可以用来声明


日志

@Slf4j 将在编译器干预, 将声明并实例化一个名为log的变量, 则在此类中可以使用log变量输出日志


Validation–参数校验

@Valid 用于验证注解是否符合要求, ,直接加在变量user之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息。

@NotNull:不允许为null值,如果客户端提交的参数中根本没有这一项,则视为null

@NotBlank:不允许为空白值,空白值包括由若干个空格、TAB符等组成字符

@NotEmpty(message = “登录名不能为空”) 不允许为空字符串,即不允许是长度为0的字符串

@Min(value = 1, message = “carouselRank最低为1”) 限制最小值

@Max(value = 200, message = “carouselRank最高为200”) 限制最大值

@Length(max = 128,message = “商品名称内容过长”) 限制长度


Knife4j

@Api:用在请求的类上,表示对类的说明
tags=“说明该类的作用,可以在UI界面上看到的注解”
value=“该参数没什么意义,在UI界面上也看到,所以不需要配置”

@ApiModel(“新增订单的DTO”) 展示出请求参数的含义和返回参数的含义。用于响应类上,表示一个返回响应数据的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,
请求参数无法使用@ApiImplicitParam注解进行描述的时候)

@ApiModelProperty(value = “用户id”,name=“userId”,example = “UU100”) 它的作用是添加和操作属性模块的数据, 用在属性上,描述响应类的属性

@ApiOperation(“根据分类id查询spu列表”) :用在请求的方法上,说明方法的用途、作用
value=“说明方法的用途、作用”
notes=“方法的备注说明”

@ApiImplicitParams({ 用在请求的方法上,表示一组参数说明
@ApiImplicitParam(value=“分类id”, name=“categoryId”, required=true, dataType=“long”), 用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
@ApiImplicitParam(value=“页码”, name=“page”, required=true, dataType=“int”),
@ApiImplicitParam(value=“每条页数”, name=“pageSize”, required=true, dataType=“int”),
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方
· header --> 请求参数的获取:@RequestHeader
· query --> 请求参数的获取:@RequestParam
· path(用于restful接口)–> 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
dataType:参数类型,默认String,其它值dataType=“Integer”
defaultValue:参数的默认值
})


单元测试

@Test 标识此方法是一个JUnit测试方法

@Sql 用于配置需要执行的SQL脚本,及执行阶段,当测试类和测试方法上都添加了此注解,则测试方法上的注解会覆盖测试类上的注解

@SpringJUnitConfig 用于指定Spring的配置类,使得当前测试类在执行测试方法之前会加载Spring环境,则在测试类中可以使用任何Spring的机制,例如自动装配等


SpringCloud

@LoadBalanced 描述RestTemplate对象,用于告诉Spring框架,在使用RestTempalte进行服务调用时,这个调用过程会被一个拦截器进行拦截,然后在拦截器内部,启动负载均衡策略。

@FeignClient 告诉Feign Starter,在项目启动时,为此注解描述的接口创建实现类-代理类

@EnableFeignCleints 描述配置类,例如启动类

@EnableDiscoveryClient 都是能够让注册中心能够发现,扫描到该服务。


Dubbo

@EnableDubbo 如果当前项目是Dubbo服务的生产者, 必须添加这个注解到启动类.

@DubboService 表示当前业务逻辑层实现类方法均会注册到nacos, 成为Dubbo可以发现的业务逻辑层方法

@DubboReference 要想调用就必须使用@DubboReference,才能获得业务逻辑层实现类对象


Seata

@GlobalTransactional 一旦编写这个注解@GlobalTransactional, seata就会将这个方法当做一个分布式事务的起点,
之后所有远程Dubbo调用的数据库操作要么都成功,要么都失败.


Sentinel

@SentinelResource(“减少库存方法(控制器)”) 在需要通过Sentinel来控制流量的地方使用,

@SentinelResource(value=“doGetResource”,blockHandlerClass = ResourceBlockHandler.class,blockHandler = “doHandle”) 需要定义blockHandlerClass.


ElasticSearch–SpringData

@Id SpringData标记这个字段为当前类主键

@Field(type = FieldType.Keyword, analyzer = “ik_max_word”,searchAnalyzer = “ik_max_word” ) SpringData使用@Field标记文档中属性的类型和各种特征


easyExcel

@ExcelProperty(value = “用户编号”,index = 0) 用户表头信息


跨域问题

@CrossOrigin


RabbitMQ

@RabbitListener(queues = {RabbitMqComponentConfiguration.SECKILL_QUEUE}) @RabbitListener 提供消费者配置

@RabbitHandler 监听队列调用

Thymeleaf

@ModelAttrtibute:常用于功能处理方法的入参上,返回值以及控制器的一般方法(非功能处理方法)上。