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,可以设置为三个值:
RetentionPolicy.SOURCE
:注解只在源代码中存在,编译时会被忽略。RetentionPolicy.CLASS
:注解在编译时被保留,但是在运行时不会被加载。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