JAVA 注解

Posted 富兰克林_YY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 注解相关的知识,希望对你有一定的参考价值。

  • @MapperScan 指定接口文件所在的根包

@Configuration 用于定义配置类,可替换XML配置文件,被注解的类内部包含一个或多个@Bean注解方法

@Component 标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的)
@Service 用来表示Service层(服务层)
@Controller 用来表示Controlle层(控制层)
@Configuration 用来表示Configuration层 (配置层)

作用:被@controller@service@repository@component 注解的类,都会把这些类纳入进spring容器中进行管理。作用相同,只是不同的名字表示不同的层,通过这样可以见名知义
@Service@Controller@Configuration其实里面有含有@Component
并且都可以替换成@Component 。因为我们习惯于存在分层观念,即,不同层表示不同的功能,于是,就出现了@Service@Controller@Configuration。用来去替换Component。即见名知义。

@Bean 一类是注册Bean,@Component , @Repository , @Controller , @Service , @Configration这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中,等你要用的时候,它会和上面的@Autowired , @Resource配合到一起,把对象、属性、方法完美组装。

@SpringBootTest注解,并在类中编写测试方法

@Test 注解 测试方法

Lombok的常用注解有:

  • @Data:添加在类上,可在编译期生成全部属性对应的Setters & Getters、hashCode()equals()toString(),使用此注解时,必须保证当前类的父类存在无参数构造方法
  • @Setter:可以添加在属性上,将仅作用于当前属性,也可以添加在类上,将作用于类中所有属性,用于生成对应的Setter方法
  • @Getter:同上,用于生成对应的Getter方法
  • @EqualsAndHashCode:添加在类上,用于生成规范的equals()hashCode(),关于equals()方法,如果2个对象的所有属性的值完全相同,则返回true,否则返回false,关于hashCode()也是如此,如果2个对象的所有属性的值完全相同,则生成的HashCode值相同,否则,不应该相同
  • @ToString:添加在类上,用于生成全属性对应的toString()方法
  • @Slf4j:添加在类上,???

如果要解决IntelliJ IDEA错误的提示,可以:

  • 使用@Resource注解替换@Autowired注解
    • 不推荐,只要是使用自动装配,都应该使用@Autowired注解
  • 不再使用@MapperScan来指定Mapper接口的包,而改为在各Mapper接口上添加@Mapper注解
    • 不推荐,使用@MapperScan是一劳永逸的做法,更加省事
  • 在各Mapper接口上添加@Repository注解
    • 推荐
    • 与添加@Mapper注解的本质不同,添加@Mapper注解是为了标识此接口是Mybatis框架应该处理的接口,添加@Repository注解是为了引导IntelliJ IDEA作出正确的判断

@Slf4j注解,则Lombok框架会在编译期生成名为log的变量,可调用此变量的方法来输出日志。

  • trace:跟踪信息,可能包含不一定关注,但是包含了程序执行流程的信息
  • debug:调试信息,可能包含一些敏感内容,比如关键数据的值
  • info:一般信息
  • warn:警告信息
  • error:错误信息

@RestControllerAdvice注解,添加了此注解的类中的特定方法将作用于整个项目任何处理请求的方法的过程!

@RequestMapping注解,以配置请求路径处理请求的方法的映射关系。@RequestMapping配置了路径后,实践使用的路径应该是这2个路径值结合起来的路径值,而@RequestMapping在处理时,会自动处理两端必要的、多余的/符号。

@PathVariable RESTful风格 可以使用自定义名称作为占位符,并且,在方法的参数列表中,自定义参数接收此变量值,在参数前还需要添加@PathVariable注解

  • @Api:添加在控制器类上,通过此注解的tags属性,可以指定模块名称,并且,可以在模块名称前自行添加数字序号,以实现排序效果,框架会根据各控制器类上@Api注解的``tags`属性值进行升序排列

  • @ApiOperation:添加在处理请求的方法上,通过此注解的value属性,可以指定业务名称

  • @ApiOperationSupport:添加在处理请求的方法上,通过此注解的order属性(数值型),可以指定排序序号,框架会根据此属性值升序排列

  • @ApiModelProperty:添加在POJO类型的属性上,通过此注解的value属性可以配置请求参数的名称,通过此注解的required属性可以配置是否必须提交此请求参数(注意:此项配置值并不具备任何检查效果)

  • @ApiImplicitParam:添加在处理请求的方法上,适用于请求参数不是POJO类型时,必须配置此注解的name属性,取值为请求参数的名称,表示当前注解是对哪个请求参数进行配置,然后,通过此注解的value属性可以配置请求参数的名称,通过此注解的required属性可以配置是否必须提交此请求参数(注意:此项配置值并不具备任何检查效果)。通过此注解的dataType属性配置请求参数的数据类型,常见取值有:stringlong

  • @ApiImplicitParams:添加在处理请求的方法上,适用于请求参数不是POJO类型,且需要配置的参数的数量超过1个时,需要配置此注解的value属性,值是@ApiImplicitParam注解的数组类型,例如:

@RequestBody注解时,则客户端提供的请求参数必须是对象格式的 当请求参数没有添加@RequestBody注解时,则客户端提供的请求参数必须是FormData格式

@ExceptionHandler注解我们一般是用来自定义异常的。

@Valid@Validated在控制器中,对于封装类型的请求参数,应该先在请求参数之前添加@Valid@Validated注解,表示将需要对此请求参数的格式进行检查

@NotNull注解,此注解表示“不允许为null值”

@Validated当处理请求的方法的参数是未封装的(例如Long id等),检查时,需要:- 在当前控制器类上添加@Validated注解- 在需要检查的请求参数上添加检查注解
@Range(min = 1, message = "删除相册失败,尝试删除的相册的ID无效!") @PathVariable Long id

  • @NotNull:不允许为null
  • @Range:此注解有minmax属性,分别通过@Min@Max实现,且min的默认值为0max的默认值为long类型的最大值,此注解只能添加在整型的数值类型上,用于设置取值区间
  • @NotEmpty:不允许为空字符串,即长度为0的字符串,此注解只能添加在字符串类型的参数上
  • @NotBlank:不允许为空白,即不允许是仅由空格、TAB制表位、换行符等空白字符组成的值,此注解只能添加在字符串类型的参数上
  • @Pattern:此注解有regexp属性,可通过此属性配置正则表达式,在检查时将根据正则表达式所配置的规则进行检查,此注解只能添加在字符串类型的参数上

@Transactional注解,即可使得此方法是事务性

@Param注解,以配置参数的名称

  • @ComponentScan,当加载此配置类时,就会激活组件扫描

  • 可以配置@ComponentScan的参数,此参数应该是需要被扫描的根包(会扫描所配置的包,及其所有子孙包),且此注解参数的值是数组类型的

  • @Component:通用注解

  • @Controller:控制器类的注解

    • @RestController:仅添加Spring MVC框架后可使用
    • @ControllerAdvice:仅添加Spring MVC框架后可使用
    • @RestControllerAdvice:仅添加Spring MVC框架后可使用
  • @Service:Service这种业务类的注解

  • @Repository:处理数据源中的数据读写的类的注解

@Scope("prototype")使得被Spring管理的对象是“非单例的”

@Qualifier注解是用于配合自动装配机制的,单独使用没有意义

  • @RequestParam:此注解可以用于:修改请求参数的名称(没有太多实用价值),强制要求必须提交此参数(可以通过Validation框架的@NotNull实现同样效果),设置请求参数的默认值(适用于允许客户端不提交此请求参数时)
  • @PathVariable:当URL中设计了占位符参数时,必须在对应的方法参数上添加此注解,以表示此参数的值来自URL中的占位符位置的值,如果占位符中的名称与方法参数名称不匹配,可以通过此注解的参数来配置
  • @RequestBody:当方法的参数添加了此注解时,客户端提交的请求参数必须是对象格式的,当方法的参数没有添加此注解时,客户端提交的请求参数必须是FormData格式的

@EnableScheduling在Spring Boot项目中,需要在配置类上添加@EnableScheduling注解,以开启计划任务,否则,当前项目中所有计划任务都是不允许执行的!

@Scheduled在任何组件类中,自定义方法,在方法上添加@Scheduled注解,则此方法就是计划任务,通过此注解的参数可以配置计划任务的执行规律。

以上是关于JAVA 注解的主要内容,如果未能解决你的问题,请参考以下文章

java注解的参数没有被赋值

java注解

Android APT注解处理器 ( 配置注解依赖支持的注解类型Java 版本支持 )

Java注解教程及自定义注解

java注解是怎么实现的?

Java 注解自定义注解 ( 使用注解实现简单测试框架 )