首页 > 其他分享 >注解(I)

注解(I)

时间:2023-08-05 15:12:16浏览次数:28  
标签:String RetentionPolicy 注解 ElementType 方法 public

JDK元注解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface Example{

上面是什么意思?

@Target 指定注解可以用于哪些元素上
可以用来限制注解的使用范围,从而提高注解的使用效率和安全性。

  • ElementType.ANNOTATION_TYPE:注解类型
  • ElementType.CONSTRUCTOR:构造方法
  • ElementType.FIELD:字段
  • ElementType.LOCAL_VARIABLE:局部变量
  • ElementType.METHOD:方法
  • ElementType.PACKAGE:包
  • ElementType.PARAMETER:方法参数
  • ElementType.TYPE:类、接口、枚举

@Retention 是 Java 中的一个注解,用于指定注解的生命周期。它有一个参数,即 RetentionPolicy,可以设置为三个值:

  1. RetentionPolicy.SOURCE:注解只在源代码中存在,编译时会被忽略。
  2. RetentionPolicy.CLASS:注解在编译时被保留,但是在运行时不会被加载。
  3. RetentionPolicy.RUNTIME:注解在运行时被保留,可以通过反射机制读取。
    通常情况下,如果需要在运行时通过反射机制读取注解信息,就需要使用 RetentionPolicy.RUNTIME。如果只是用于编译时的检查,可以使用 RetentionPolicy.SOURCE 或 .CLASS。

自定义注解

@interface——自定义注解
注解是一种元数据,它提供了关于程序元素(如类、方法、变量等)的额外信息,这些信息可以在运行时被读取和使用。

使用@interface定义注解类型时,需要指定注解的名称、可选的元素和默认值。注解的元素可以是基本数据类型、字符串、枚举类型、注解类型或它们的数组类型。注解类型可以用于修饰类、方法、变量、参数等程序元素,以提供额外的信息或指示程序的行为。

例如,可以使用注解类型@Deprecated来标记一个方法或类已经过时,使用注解类型@NotNull来标记一个参数不能为空,使用注解类型@JsonIgnore来标记一个属性在序列化和反序列化时应该被忽略等等。

比如下面这个简单的@interface例子定义了一个名为MyAnnotation的注解,它有一个名为value的属性,类型为String。
@Retention@Target是元注解,用于指定注解的保留策略和作用目标。在这个例子中,@Retention(RetentionPolicy.RUNTIME)表示注解在运行时可见,@Target(ElementType.METHOD)表示注解只能用于方法上。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String value();
}
使用注解时
@MyAnnotation("hello")
public void myMethod() {
    // do something
}

在myMethod方法上使用了MyAnnotation注解,并传入了一个值为"hello"的参数。在运行时,可以通过反射获取这个注解,并读取它的属性值。

lombok注解

@Getter注解
:自动生成该属性的getter方法,避免手动编写getter方法的重复劳动。

@Setter注解
:自动生成该属性的setter方法,简化代码编写。

@Slf4j注解
Lombok 提供的一个注解,用于自动生成日志变量。它可以帮助开发者在代码中快速地添加日志功能,避免手动编写冗长的日志代码。使用 @Slf4j 注解后,可以直接在代码中使用 log 变量进行日志输出,而不需要手动创建 Logger 对象。注意,使用 @Slf4j 注解前需要先引入 Lombok 依赖。

@Builde注解
用于在Java中自动生成构造器方法。
它是Lombok库中的一部分,可以通过在类上添加该注解来自动生成构造器方法,从而简化代码编写。使用@Builder注解后,可以通过链式调用的方式设置对象的属性值,使代码更加简洁易读。

@Builder.Default 是 Lombok 提供的注解,用于在使用 Lombok 的 @Builder 注解时,为某个属性设置默认值。

@Builder
public class Person {
    private String name;
    @Builder.Default
    private int age = 18;
}
@Builder.Default 注解为 age 属性设置了默认值为 18。这样,在使用 @Builder 注解创建 Person 对象时,如果没有显式地设置 age 属性的值,它就会默认为 18。
Person person = Person.builder()
	.name("John")
	.build();

@AllArgsConstructor注解
自动生成一个包含所有参数的构造函数。

import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Person {
    private String name;
    private int age;
    private String address;
}
自动生成一个包含所有参数的构造函数
public Person(String name, int age, String address) {
    this.name = name;
    this.age = age;
    this.address = address;
}






### Spring注解
**@Component**
:将一个类标记为Spring容器中的一个组件,会被Spring自动扫描并注册为一个Bean,方便实现依赖注入和控制反转,使得代码更加模块化、可维护和可测试。
与其他几个注解 如@Service、@Repository、@Controller分别用于标记不同类型的组件,但都是@Component的派生注解。

**@ResponseBody**
:标识一个方法返回的结果直接作为HTTP响应体的内容,而不是被解析为一个视图名称。通常用于返回JSON或XML格式的数据。

**@RestController**
:是@Controller和@ResponseBody注解的结合体,使用@RestController注解的类表示这是一个控制器,同时方法返回的数据会直接写入HTTP响应正文中,而不是返回一个视图。这样可以方便地编写RESTful风格的Web服务,返回JSON或XML等格式的数据。

**@PostMapping**
将HTTP POST请求映射到特定的处理程序方法上。它告诉Spring框架,当收到一个POST请求时,应该调用被该注解标记的方法来处理该请求。通常,该方法会处理请求的参数,并返回一个响应。比如例子:
```java
@PostMapping("/login")
public String login(@RequestParam("username") String username, @RequestParam("password") String password) {
    // 处理登录逻辑
    return "redirect:/home";
}

@PostMapping注解告诉Spring框架,当收到一个POST请求,且请求的URL为“/login”时,应该调用login()方法来处理该请求。该方法会从请求参数中获取用户名和密码,并进行登录逻辑处理,最后返回一个重定向到主页的响应。

@RequestBody
指示方法参数应该从 HTTP 请求正文中读取。在 RESTful Web 服务中,客户端通常会向服务器发送 JSON 或 XML 格式的数据,这些数据包含了请求所需的参数。使用 @RequestBody 注解可以将这些数据绑定到方法参数上,从而方便地获取请求参数并进行处理。

@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
    // 处理 user 对象并返回响应
}

createUser 方法使用 @RequestBody 注解将 HTTP 请求正文中的 JSON 或 XML 数据绑定到 User 对象上。然后,该方法可以使用 User 对象中的数据来创建新用户,并返回一个包含新用户信息的响应。

SpringBoot注解

@ConfigurationProperties
:将配置文件中的属性值自动映射到对应的 Java对象中。方便地管理应用程序的配置,避免硬编码配置信息,提高代码的可维护性和可读性。

在 application.properties 文件中有如下配置:
myapp.name=My Application
myapp.version=1.0.0

创建一个 Java 类来映射这些属性:
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
    private String name;
    private String version;
    // getters and setters
}

在这个类上添加 @ConfigurationProperties 注解,并指定前缀为 "myapp",这样 Spring Boot 就会自动将配置文件中以 "myapp" 开头的属性值绑定到该类的属性上。

标签:String,RetentionPolicy,注解,ElementType,方法,public
From: https://www.cnblogs.com/yuanbaobao/p/17607940.html

相关文章

  • mybatis-plus中的@Select注解里面写sql语句的in
    @Select("<script>"+"select\n"+"email\n"+"fromsys_user\n"+"whereidin\n"+"<foreachitem='item'index='index'collection='ids'open='(&......
  • mybatis-plus中的@Select注解里面写sql语句的in
    @Select("<script>"+    "select\n"+    "email\n"+    "fromsys_user\n"+    "whereidin\n"+    "  <foreachitem='item'index='index'colle......
  • mybatis-plus中的@Select注解里面写sql语句的in
    @Select("<script>"+    "select\n"+    "email\n"+    "fromsys_user\n"+    "whereidin\n"+    "  <foreachitem='item'index='index'colle......
  • day124 - 基于注解管理bean
    基于注解管理bean注解和XML配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作。本质上:所有一切的操作都是Java代码来完成的,XML和注解只是告诉框架中的Java代码如何执行。S......
  • 一步一步实现若依框架--2.5匿名注解@Anonymous
     1实现绕过权限认证,可以直接访问某些接口。这些部分可以直接在SpringSecurity中的配置去写,也可以像这个主角这样给添加了注解的方法或类进行放行。原理:在springsecurity设置拦截前,获取到所有添加了该注解的请求,把这些请求添加到放开拦截的配置中。2实现a)新增注解(注解......
  • 对于Spring中的@Scheduled注解,cron表达式的格式与传统的cron表达式有所不同。
    @Scheduled(cron="00*/1**?")对于Spring中的@Scheduled注解,cron表达式的格式与传统的cron表达式有所不同。Spring的cron表达式包含6个字段,分别是秒分时日月星期。其中,秒是可选的。根据您提供的@Scheduled(cron="00*/1**?"),这表示任务会在每个小时的0分0秒执......
  • @ControllerAdvice注解使用及原理探究 | 京东物流技术团队
    最近在新项目的开发过程中,遇到了个问题,需要将一些异常的业务流程返回给前端,需要提供给前端不同的响应码,前端再在次基础上做提示语言的国际化适配。这些异常流程涉及业务层和控制层的各个地方,如果每个地方都写一些重复代码显得很冗余。然后查询解决方案时发现了@ControllerAdvice这......
  • Java反射与自定义注解实现不同Bean属性映射的高效解决方案
    假设现有一个叫user的bean,里面有username、passsword、sex、createTime这四个属性,需要实现一个功能,把其它bean里的字段分别映射到user里的username、passsword、sex、createTime这几个属性上,然后可以根据其它的bean的实例自动转化为user的实例(填充对应属性值),下面是代码实现。Java......
  • Mybatis-Plus 多数据源 @DS注解部分失效
    环境springboot+mybatis-plus在controller层一个request中有多个service调用保存接口,发现在mapper层上定义的@DS注解指定数据源部分指向了primary数据源。导致表找不到。处理猜测是不能走mybatis-plus生成的batchSave方法,将controller中多个service处理逻辑放到指定service中,......
  • spring-mvc系列:详解@RequestMapping注解(value、method、params、header等)
    目录一、@RequestMapping注解的功能二、@RequestMapping注解的位置三、@RequestMapping注解的value属性四、@RequestMapping注解的method属性五、@RequestMapping注解的params属性六、@RequestMapping注解的header属性七、SpringMVC支持ant分格的路径八、SpringMVC支持路径中的占......