java常用的注解(个人笔记)

java注解

提示:本文大部分翻译采用APP直接翻译

一、java的内置注解(java 7 后额外添加了后三个注解)

  • @Override-重写方法

  • @Deprecatd 过时方法使用会编译警告https://baike.baidu.com/item/%E6%B3%A8%E8%A7%A3/22344968

  • @SuppessWarnings 忽略声明警告

  • @Target --标记注解为哪个java成员

  • @Inherited 标记注解继承哪个注解

  • @SafeVarargs 忽略任何参数关于 泛型变量的方法和构造函数产生的警告

  • @FunctionalInterface 标识一个匿名函数或函数式接口

  • @Repeatable 标识某注解可以在同一个声明上使用多次。

二、元注解

  • @Retention

描述注解保留的时间范围


package java.lang.annotation;

/**
 * Annotation retention policy.  The constants of this enumerated type
 * describe the various policies for retaining annotations.  They are used
 * in conjunction with the {@link Retention} meta-annotation type to specify
 * how long annotations are to be retained.
 *
 * @author  Joshua Bloch
 * @since 1.5
 */
public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     * 注释将被编译器丢弃
     * 源文件保留
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     * 在编译器 保留 不在运行虚拟机时保留
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *注释将被编译器记录在类文件中由VM在运行时保留,因此它们可能被反射地读取。
     运行期保留  可以通过反射获得注解信息
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

  • @Target

描述注解的使用范围(即:被修饰的注解可以用在什么地方) 。

public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration 类,接口,枚举类 */
    TYPE,

    /** Field declaration (includes enum constants) 成员变量 枚举常量*/
    FIELD,

    /** Method declaration  成员方法 */
    METHOD,

    /** Formal parameter declaration 方法参数*/
    PARAMETER,

    /** Constructor declaration  构造方法*/
    CONSTRUCTOR,

    /** Local variable declaration  局部变量*/
    LOCAL_VARIABLE,

    /** Annotation type declaration  注解类*/
    ANNOTATION_TYPE,

    /** Package declaration  修饰包*/
    PACKAGE,

    /**
     * Type parameter declaration
     *类型 参数  1,。8 新增
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *使用类型的任意地方
     * @since 1.8
     */
    TYPE_USE
}

  • @Documented 机反(记录注释)

是一个标记注解 功能生成帮助文档时保留其注解信息
默认情况下,JavaDoc 是不包括注解的,但如果声明注解时指定了 @Documented,就会被 JavaDoc 之类的工具处理,所以注解类型信息就会被包括在生成的帮助文档中。

  • @Inherited 机反(遗传)

标记注解 用来指定该注解可以被继承

  • @Result

三、常用注解

@Controller

//控制器 @component扩展 用于指示Spring类的实例是一个控制器,该注解不需要在实现COntroller接口
//只需要加入控制器类上 ,spring扫描机制加会找到这个类 <context:component-scan base-package=“com”/>
//需要在xml中 添加 包扫描配置信息
在这里插入图片描述

@RequestMapping

//用于映射一个请求或者一个方法,可以放在方法或者类上面
//在类上 : 该类中的所有方法到将映射为相对于类级别的请求,表示该控制器所有请求映射到value属性值所指定的路劲下 /user/selectUser
//在方法上 : 作为请求处理方法在程序接受到对应的url请求时调用

一些组合注解
在这里插入图片描述

@PatchMapping

@GetMapping

@PostMapping

@PutMapping

等于= @RequestMapping(value = “/updatePerson”,method =
RequestMethod.PUT) 就相对于这个了 这几个 都是相同类似的 注解

@DeleteMapping

@RestController

相当于@ResponseBody和@Controller的组合注解
在这里插入图片描述

原来返回json需要@ResponseBody和@Controller配合。

@ResponseBody

将java对象转为json格式的数据,使用此注解之后不会再走视图处理器 , 可以把后台传到前端的数据自动转换为json

@RequestBody

用来接收前端传递给后台的json字符串 一般是post请求
一个请求,只有一个RequestBody
看大佬的去
注意
使用requestBody时不能使用getMapping请求 因为 不支持request body 中放值
推荐文章

@RequestParam

作用 :传递参数
在接收前端传递的参数时,参数的名字必须有对应的名字 如果没有对应的名字会报400
一个请求,可以有多个RequestParam。
方法中的参数
value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
也可以直接接MAP

@PathVariable(路径变量)

以将 URL 中占位符参数绑定到控制器处理方法的入参中
在这里插入图片描述

@PathParam()

这个注解是和spring的pathVariable是一样的,也是基于模板的,但是这个是jboss包下面的一个实现,上面的是spring的一个实现,都要导包

@ResponseStatus

 @ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR)
 该函数用于设置响应状态码为500(内部服务器错误)。 当服务器在处理请求时发生不可预知的错误时,可以使用该注解将响应状态码设置为500,告知客户端发生了内部服务器错误。
    @ExceptionHandler(Exception.class)
        @ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR)
        public ResultDTO<String> handleException(Exception e) {
            log.error("系统异常", e);
            ResultDTO<String> resultDTO = new ResultDTO<>();
            resultDTO.setMessage(e.getMessage());
            resultDTO.setSuccess(Boolean.FALSE);
            resultDTO.setCode(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()));
            return resultDTO;
        }

用应返回的状态代码和原因标记方法或异常类。
当调用处理程序方法时,状态代码将应用于HTTP响应,但不会覆盖通过其他方式设置的状态信息,如ResponseEntity或“redirect:”。
警告:在异常类上使用此注释时,或设置此注释的原因属性时,将使用HttpServletResponse.sendError方法。
对于HttpServletResponse.sendError,响应被认为是完整的,不应再写入任何内容。此外,Servlet容器通常会编写一个HTML错误页面,因此使用了不适合RESTAPI的原因。对于这种情况,最好使用org.springframework.http。ResponseEntity作为返回类型,并完全避免使用@ResponseStatus。
请注意,控制器类也可以用@ResponseStatus进行注释,然后由tha中的所有@RequestMapping和@ExceptionHandler方法继承

@QueryParam

是jax-rs提供的 和 spring RequestParam的功能是一样的

@ExceptionHandler

在这里插入图片描述

作用 : 自定义注解
有什么用 :可以当成异常拦截器
用在方法上 结合ControllerAdvice注解 可以进行全局异常拦截处理

@ControllerAdvice

这是一个增强的 Controller
用来
全局异常处理
全局数据绑定
全局数据预处理

@Data

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
 </dependency>

注解在类上, 为类提供get,set读写属性, 此外还提供了 equals()、hashCode()、toString() 方法

@AllArgsConstructor

翻译:所有构造函数

会生成一个包含所有变量,同时如果变量使用了NotNull annotation , 会进行是否为空的校验,

使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数就是全部参数的构造函数的自动生成,该注解的作用域也是只有在实体类上,参数的顺序与属性定义的顺序一致。

@NoArgsConstructor

翻译: 无参数构造函数

无参构造函数

@RequiredArgsConstructor

Spring 从 4.0 开始, 就不在 推 荐 使 用 属 性 注 入 ,原因是它会让我们忽略掉一些代码的隐患。

所以,构造器的方法就成了首选。
可以生成带有必需参数的构造函数

把需要注入的属性,修改成 final 类型的(或者使用 @NotNull 注解,不推荐),这些属性将构成默认的构造器。

基于lombok包,必须引用lombok

@Component

最普通的组件,可以被注入到spring容器进行管理
把普通pojo实例化到spring容器中,相当于配置文件中的

@Service

作用于业务逻辑层
把服务层的类交给springioc容器管理

@Slf4j

pom文件加入lombok的依赖

作日志输出的,

@Accessors(chain = true)

在这里插入图片描述

@Accessors(chain = true)是Lombok库中的一个注解,用于自动生成具有链式调用特性的getter和setter方法。当您在类定义上添加此注解时,Lombok会为该类的属性生成setter方法,使得调用setter方法后返回当前对象实例,而不是传统的void。这样,可以方便地连续调用多个setter方法,形成链式调用,提高代码的可读性和简洁性。

注意子父类继承的时候可能导致方法返回类型不同 报错

  1. 链式setter与覆盖冲突:
    如果BaseEntity类没有使用@Accessors(chain = true)注解,其setDelFlag方法遵循传统JavaBean规范,返回void。而父类或子类使用了@Accessors(chain = true)注解,导致其生成的setDelFlag方法返回当前对象实例(即父类或子类的实例)。
    在这种情况下,子类的setDelFlag方法与父类的setDelFlag方法返回类型不兼容,无法构成有效的覆盖关系。编译器会报出类似“返回类型不兼容”的错误。
  2. IDE或编译器对Lombok注解的支持问题:
    虽然Lombok注解在编译阶段会被处理并生成对应的Java代码,但IDE或编译器在解析和显示错误时可能无法正确识别和处理这些注解。
    这可能导致IDE或编译器错误地报告返回类型不兼容,即使实际上子类的setDelFlag方法已经正确实现了链式调用,并且返回类型与父类方法一致(即都是当前类的实例)。

四、spring的常用注释

@SpringBootApplication (Spring Boot 应用程序)

有了它项目就可以运行起来,因为他相当于3个注解的功能
@SpringBootConfiguration(Spring Boot 配置)
加载Spring的配置
@EnableAutoConfiguration(启用自动配置)
@ComponentScan(组件扫描)

@Configuration(配置)

等同于spring的XML配置文件(将类标记为应用程序上下文的Bean定义的源。)

@Import

  • List item

@Import引入普通的类可以帮助我们把普通的类定义为Bean。@Import可以添加在@SpringBootApplication(启动类)、@Configuration(配置类)、@Component(组件类)对应的类上。

@Secured和@PreAuthorize

连接

@Autowired

翻译 : 自动连线
如果容器中存在一个bean,这个bean的类型和id与被标注@Autowired的属性或者方法参数的类型和名称相同, 就可以完成依赖注入 主要用到的功能就是依赖注入了
推荐文章

@Resource

翻译:资源

spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。
类似Autowired Autowired默认按种类自动找 resource 默认按面字

1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
看的这个兄弟的

@RefreshScope

@Transactional

事务处理

@Transactional(rollbackFor = {Exception.class, RuntimeException.class})

@Serial

  1. 标注常量
  2. 标注序列化方法
  3. 标注 readResolve 和 writeReplace 方法
    serialVersionUID: 类实现了Serializable 接口时,serialVersionUID 用作版本控制。
    @Serial 注解可以被用来明确标记这个字段,表明它与序列化直接相关。
    @Serial
    private static final long serialVersionUID = 1L;

使用 @Serial 注解不是强制性的,
但它可以帮助开发人员和工具更好地理解代码,特别是在涉及序列化操作时。通过标注直接参与序列化过程的相关字段和方法,可以更明确地展示代码的意图,同时也利于静态分析工具检查代码的正确性。

五、小

@FieldEncrypt

mybatis- plus-mate
付费使用面向企业的版本,里面提供了企业常规需要的一些东西,这个注解就是里面提供的加密功能的注解,可以写在字段上,也有脱敏相关的内容

@Trim

@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Trim {
}

和trim方法差不多

六、其他包

JUnit5和Junit 4

JUnit5 @BeforeAll 注解替换了 JUnit4 中的@BeforeClass注解。 它用于表示应在当前测试类中的所有测试之前执行注解方法。

### @BeforeAll (JUnit5 )

swagger

@Operation(v3)

接口注释

 @Operation(summary = " ", description = " ")
  • 8
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Network porter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值