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

本文详细介绍了Java内置注解如@Override、@Deprecated等,元注解如@Retention、@Target,以及Spring框架中的核心注解如@Controller、@SpringBootApplication。涵盖了Controller设计、路由映射、异常处理、数据绑定等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

@Cacheable

添加缓存

@CacheEvict

清楚缓存

@CachePut

更新缓存

@Caching

针对一个方法或者数据创建多个缓存

@CacheConfig

类级别注释
可以共享缓存名称

++++++++++++++++++++++++++++++++++Spring缓存官方参考地址

五、小

@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 = " ")
<think>好的,我现在需要回答用户关于Java常用注解及其用法的问题。首先,用户已经提供了两段参考引用,我需要结合这些信息来构建回答。让我仔细看看用户提供的引用内容。 引用[1]提到Java注解是JDK5引入的新特性,用于为代码提供元数据,将元数据与程序元素关联,有助于简化程序设计。这部分解释了注解的基本概念和作用,可以作为引言部分的基础。 引用[2]则给出了一些具体的常用注解,比如在业务层的方法、类、接口上使用的注解,特别是事务管理相关的注解,比如可能指的是Spring的@Transactional。这里需要确认@Transactional的作用,以及它在Spring中的使用场景。 用户的需求是了解常用注解列表及作用,所以我需要列举不同类别下的常见注解,并说明它们的作用和用法。可能需要分层次来组织,比如分为核心Java注解Spring框架中的注解、JUnit测试注解等,这样结构更清晰。 接下来,我需要回忆或查找常见的Java注解。核心Java中的内置注解包括@Override、@Deprecated、@SuppressWarnings,这些必须提到。然后是框架中常用的,比如Spring的@Autowired、@Controller、@Service、@Repository,JPA的@Entity、@Table,Spring Boot的@SpringBootApplication,Spring MVC的@RequestMapping及其变体如@GetMapping,还有Spring的@Transactional。JUnit的@Test、@Before、@After等也是常用的。 需要确保每个注解的作用和使用场景都准确。比如@Transactional用于事务管理,需要说明它可以用在方法或类上,开启事务、提交或回滚的条件。@Autowired用于自动注入依赖,@Component及其派生注解用于标记Spring管理的组件。 另外,用户提供的引用[2]中提到了事务管理,这可能涉及Spring的声明式事务管理,需要强调@Transactional的使用位置和效果。同时,用户可能对如何正确使用这些注解感兴趣,所以需要给出简单的示例,如代码片段,但根据系统指令,行内代码需要用$...$格式,独立代码块用$$...$$,但用户示例中的Python代码用了```python,这里可能需要调整。不过用户的问题是关于Java的,所以可能需要用Java代码示例,但根据指令,数学表达式才需要LaTeX,代码可能用代码块。不过原问题中的示例用户可见层允许使用代码块,所以可能需要用正确的格式。 还需要注意系统级指令中的要求:行内数学表达式用$...$,独立公式用$$...$$,但这里的回答主要是文本和代码,可能不涉及数学公式,但需要正确使用LaTeX格式。不过用户的问题是关于注解,可能不需要数学表达式,但需要确保所有提到的代码部分正确格式化。 另外,需要生成相关问题,用户示例中列出了三个相关问题,我需要根据回答内容提出相关的扩展问题,比如注解的工作原理、自定义注解的方法、事务注解的注意事项等。 现在,我需要组织这些信息,按照用户提供的结构,首先回答常用注解列表及作用,分点说明,然后生成相关问题。同时,确保引用标记正确添加,引用[1]和引用[2]分别在相应的位置被引用。 需要验证每个注解的准确性,比如@Transactional是否属于Spring而非Java核心库,确保分类正确。例如,核心Java注解Java自带的,而其他如Spring、JPA、JUnit的注解属于特定框架的扩展。 可能还需要补充一些常用注解,比如Lombok的@Data、@Getter、@Setter,但用户提供的引用中没有提到,是否需要包含?根据用户的问题,是询问Java中的常用注解,可能包括核心和主流框架的,所以可以包括Spring相关的,但Lombok可能属于第三方库,视情况是否提及。不过用户提供的引用中没有提到,可能暂时不包含,保持回答基于用户提供的资料和常见知识。 总结,结构可能如下: 1. 引言:Java注解的作用(引用[1]) 2. 分类列举常用注解: a. Java核心注解:@Override, @Deprecated, @SuppressWarnings b. Spring框架注解:@Autowired, @Component, @Controller, @Service, @Repository, @Transactional(引用[2]) c. Spring MVC注解:@RequestMapping, @GetMapping等 d. JPA注解:@Entity, @Table e. JUnit注解:@Test, @Before, @After f. Spring Boot注解:@SpringBootApplication 3. 每个注解的作用和示例代码(如果有必要) 4. 相关问题:如何自定义注解注解的工作原理、事务管理注意事项等 需要确保每个部分的信息准确,引用正确。例如,在提到@Transactional时,引用[2]中的内容需要被引用,说明其作用和在业务层的应用。 最后,生成的相关问题应基于回答内容,帮助用户进一步探索。</think>### Java常用注解列表及作用 Java注解(Annotation)是JDK5引入的元数据标记机制,用于为类、方法、字段等元素添加说明信息,简化代码与元数据的耦合[^1]。以下是Java中常见的注解及其作用: --- #### 1. **核心Java注解** - **`@Override`** 标记方法重写父类或接口的方法,编译器会检查方法签名是否正确。 ```java @Override public String toString() { return "example"; } ``` - **`@Deprecated`** 标记已过时的方法或类,调用时编译器会生成警告。 ```java @Deprecated public void oldMethod() { /* ... */ } ``` - **`@SuppressWarnings`** 抑制编译器警告(如未使用变量、未检查类型等)。 ```java @SuppressWarnings("unchecked") List list = new ArrayList(); ``` --- #### 2. **Spring框架注解** - **`@Autowired`** 自动注入依赖对象,默认按类型匹配。 ```java @Autowired private UserService userService; ``` - **`@Component`及其派生注解** 标记类为Spring管理的组件: - **`@Controller`**:Web层控制器。 - **`@Service`**:业务逻辑层。 - **`@Repository`**:数据访问层。 ```java @Service public class UserService { /* ... */ } ``` - **`@Transactional`** 声明事务管理,方法执行前开启事务,成功提交,异常回滚[^2]。 ```java @Transactional public void updateUser(User user) { /* ... */ } ``` --- #### 3. **Spring MVC注解** - **`@RequestMapping`及变体** 定义HTTP请求映射: - `@GetMapping`、`@PostMapping`:限定请求方法。 ```java @GetMapping("/users") public List<User> getUsers() { /* ... */ } ``` - **`@ResponseBody`** 将方法返回值直接写入HTTP响应体(如JSON)。 --- #### 4. **JPA(数据库映射)注解** - **`@Entity`** 标记类为数据库实体,对应一张表。 - **`@Table`** 指定实体对应的表名。 ```java @Entity @Table(name = "user") public class User { /* ... */ } ``` --- #### 5. **JUnit测试注解** - **`@Test`** 标记方法为测试用例。 - **`@Before`/`@After`** 在每个测试方法执行前/后运行。 ```java @Before public void setup() { /* ... */ } ``` --- #### 6. **Spring Boot注解** - **`@SpringBootApplication`** 标记主启动类,整合自动配置、组件扫描等功能。 ```java @SpringBootApplication public class Application { public static void main(String[] args) { /* ... */ } } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Network porter

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

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

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

打赏作者

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

抵扣说明:

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

余额充值