目 录CONTENT

文章目录

Java常用注解及其作用

Administrator
2024-12-11 / 0 评论 / 0 点赞 / 23 阅读 / 0 字

Java常用注解及其作用

一、Java核心注解

  1. @Override
    • 作用:用于标识子类重写父类的方法。它可以帮助编译器检查方法签名是否正确匹配父类中的被重写方法,避免因误写方法名、参数列表等导致的错误。
    • 示例:
class Parent {
    public void print() {
        System.out.println("Parent print");
    }
}

class Child extends Parent {
    @Override
    public void print() {
        System.out.println("Child print");
    }
}
  1. @Deprecated
    • 作用:表示被修饰的元素(类、方法、字段等)已过时,不建议使用。当使用已过时的元素时,编译器会发出警告,提示开发者应该考虑使用其他替代方案。
    • 示例:
class OldClass {
    @Deprecated
    public void oldMethod() {
        System.out.println("This is an old method.");
    }
}
  1. @SuppressWarnings
    • 作用:用于抑制编译器生成特定的警告信息。例如,当代码中存在一些可能导致警告但开发者确定不需要警告的情况时,可以使用该注解来告诉编译器忽略这些警告。
    • 示例:
@SuppressWarnings("unchecked")
List list = new ArrayList();

二、Spring框架常用注解

  1. @Component
    • 作用:将普通的Java类标记为Spring的组件,使得Spring容器能够扫描并管理这些类的实例。它是一个泛化的概念,包括@Service@Repository@Controller等注解。
    • 示例:
@Component
public class MyComponent {
    //...
}
  1. @Service
    • 作用:用于标注业务逻辑层的组件,明确表示该类是一个服务类,主要处理业务逻辑相关的操作。
    • 示例:
@Service
public class UserService {
    //...
}
  1. @Repository
    • 作用:用于数据访问层(如DAO层)的组件,表明该类是用于与数据库或其他数据存储进行交互的存储库类,方便Spring进行数据访问相关的管理和异常处理。
    • 示例:
@Repository
public class UserRepository {
    //...
}
  1. @Controller
    • 作用:用于标注Web应用中的控制器类,负责处理HTTP请求并返回响应,通常与Spring MVC框架结合使用。
    • 示例:
@Controller
public class UserController {
    //...
}
  1. @Autowired
    • 作用:由Spring容器自动装配依赖关系。可以用于字段、构造函数、方法等,让Spring根据类型自动查找并注入合适的依赖对象。
    • 示例:
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    //...
}
  1. @Qualifier
    • 作用:当存在多个相同类型的候选依赖对象时,与@Autowired配合使用,通过指定名称来明确要注入的具体对象。
    • 示例:
@Service
public class UserService {
    @Autowired
    @Qualifier("userRepositoryImpl")
    private UserRepository userRepository;
    //...
}
  1. @RequestMapping
    • 作用:用于映射Web请求到控制器的处理方法。可以指定请求的URL路径、HTTP方法(如GET、POST等)等信息。
    • 示例:
@Controller
@RequestMapping("/users")
public class UserController {
    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public String listUsers() {
        //...
        return "userList";
    }
}
  1. @RestController
    • 作用:是@Controller@ResponseBody的组合注解,用于创建一个返回JSON或其他数据格式而不是视图的Web控制器。
    • 示例:
@RestController
@RequestMapping("/api/users")
public class UserApiController {
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public User getUserById(@PathVariable("id") Long id) {
        //...
        return user;
    }
}
  1. @RequestBody
    • 作用:用于将HTTP请求体中的数据绑定到方法的参数上,通常用于接收JSON或XML等格式的数据并转换为Java对象。
    • 示例:
@RestController
@RequestMapping("/api/users")
public class UserApiController {
    @RequestMapping(method = RequestMethod.POST)
    public User createUser(@RequestBody User user) {
        //...
        return user;
    }
}
  1. @ResponseBody
  • 作用:将方法的返回值直接作为HTTP响应体返回,而不是作为视图名称进行解析。常用于返回JSON、XML等数据格式给客户端。
  • 示例:
@Controller
@RequestMapping("/api/users")
public class UserApiController {
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    @ResponseBody
    public User getUserById(@PathVariable("id") Long id) {
        //...
        return user;
    }
}

三、Java持久化(JPA/Hibernate)常用注解

  1. @Entity
    • 作用:标记一个Java类为JPA实体类,表示该类可以被映射到数据库表中。
    • 示例:
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    //...
}
  1. @Table
    • 作用:指定实体类对应的数据库表名、表的目录、架构等信息。如果不使用该注解,默认表名与实体类名相同。
    • 示例:
@Entity
@Table(name = "user_table")
public class User {
    //...
}
  1. @Id
    • 作用:标识实体类中的主键字段。
    • 示例:
@Entity
public class User {
    @Id
    private Long id;
    //...
}
  1. @GeneratedValue
    • 作用:指定主键的生成策略,如自增长(IDENTITY)、序列(SEQUENCE)、表生成(TABLE)等。
    • 示例:
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    //...
}
  1. @Column
    • 作用:用于指定实体类字段与数据库表列的映射关系,包括列名、列的长度、是否可为空等属性。
    • 示例:
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "user_name", length = 50, nullable = false)
    private String name;
    //...
}
  1. @OneToMany
    • 作用:定义实体类之间的一对多关系,例如一个用户可以有多个订单。在关系的“一”方使用该注解。
    • 示例:
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    @OneToMany(mappedBy = "user")
    private List<Order> orders;
    //...
}
  1. @ManyToOne
    • 作用:定义实体类之间的多对一关系,在关系的“多”方使用该注解。例如多个订单对应一个用户。
    • 示例:
@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    //...
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    //...
}
  1. @JoinColumn
    • 作用:在多对一或一对一关系中,指定外键列的相关信息,如列名、是否唯一等。
    • 示例:
@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    //...
    @ManyToOne
    @JoinColumn(name = "user_id", unique = false)
    private User user;
    //...
}
  1. @ManyToMany
    • 作用:定义实体类之间的多对多关系,例如一个学生可以选修多门课程,一门课程可以被多个学生选修。需要使用中间表来存储关系信息。
    • 示例:
@Entity
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    @ManyToMany
    @JoinTable(name = "student_course",
               joinColumns = @JoinColumn(name = "student_id"),
               inverseJoinColumns = @JoinColumn(name = "course_id"))
    private List<Course> courses;
    //...
}
  1. @JoinTable
  • 作用:在多对多关系中,用于指定中间表的相关信息,包括表名、关联的外键列等。
  • 示例:
@Entity
public class Student {
    //...
    @ManyToMany
    @JoinTable(name = "student_course",
               joinColumns = @JoinColumn(name = "student_id"),
               inverseJoinColumns = @JoinColumn(name = "course_id"))
    private List<Course> courses;
    //...
}

四、其他常用注解

  1. @FunctionalInterface
    • 作用:用于标记一个接口为函数式接口,即该接口只包含一个抽象方法(除了default方法和static方法)。函数式接口可以用于Lambda表达式等函数式编程场景。
    • 示例:
@FunctionalInterface
public interface MyFunction {
    int apply(int x);
}
  1. @SafeVarargs
    • 作用:在使用可变参数的方法或构造函数中,用于抑制编译器关于可变参数的非受检警告。它表示开发者已经确保了可变参数的使用是类型安全的。
    • 示例:
@SafeVarargs
public static <T> void printAll(T... args) {
    for (T t : args) {
        System.out.println(t);
    }
}
  1. @Native
    • 作用:用于标记一个字段,表示该字段在本地代码(如C或C++代码)中定义。它通常用于与本地代码进行交互的Java代码中,告知编译器该字段与本地代码相关。
    • 示例:
public class NativeExample {
    @Native
    public static final int MAX_VALUE;
    static {
        System.loadLibrary("nativeLibrary");
        MAX_VALUE = getMaxValueFromNative();
    }
    private static native int getMaxValueFromNative();
}
  1. @Target
    • 作用:用于指定注解的适用目标,可以是类、方法、字段、参数等。例如,可以指定一个注解只能用于方法上。
    • 示例:
@Target(ElementType.METHOD)
public @interface MyMethodAnnotation {
    //...
}
  1. @Retention
    • 作用:用于定义注解的保留策略,即注解在什么阶段可见。可以是SOURCE(只在源码阶段可见)、CLASS(在编译后的类文件中可见,但在运行时不可见)、RUNTIME(在运行时也可见)。
    • 示例:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyRuntimeAnnotation {
    //...
}
  1. @Documented
    • 作用:表示被该注解修饰的元素会被包含在JavaDoc文档中,方便生成API文档时展示相关信息。
    • 示例:
@Documented
public @interface MyDocumentedAnnotation {
    //...
}
  1. @Inherited
    • 作用:指定注解具有继承性,即如果一个类被该注解修饰,那么它的子类也会自动被该注解修饰。
    • 示例:
@Inherited
public @interface MyInheritedAnnotation {
    //...
}
  1. @Repeatable
    • 作用:从Java 8开始引入,用于表示一个注解可以在同一个元素上重复使用。需要创建一个包含该注解类型元素的容器注解。
    • 示例:
@Repeatable(MyRepeatableAnnotations.class)
public @interface MyRepeatableAnnotation {
    String value();
}

public @interface MyRepeatableAnnotations {
    MyRepeatableAnnotation[] value();
}
  1. @Data
    • 作用:来自Lombok库,它是一个组合注解,相当于同时使用了@Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor等注解,用于自动生成一些常用的方法,如属性的获取器、设置器、toString方法、equalshashCode方法以及包含必需参数的构造函数等,减少代码冗余。
    • 示例:
import lombok.Data;

@Data
public class User {
    private String name;
    private int age;
}
  1. @Slf4j
  • 作用:来自Lombok库,用于在类中自动生成一个基于SLF4J(Simple Logging Facade for Java)的日志记录器对象,方便进行日志记录,避免手动创建日志记录器的繁琐过程。
  • 示例:
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyClass {
    public void doSomething() {
        log.info("Doing something...");
    }
}

Java常用60个注解及其作用

1. 元注解

  • @Retention:定义注解的保留策略。
  • @Target:指定注解可以用于哪些Java元素。
  • @Documented:表明注解应该被Javadoc工具文档化。
  • @Inherited:允许子类继承父类的注解。
  • @Repeatable:允许注解在同一个声明上使用多次。

2. 标准注解

  • @Override:表示当前方法声明打算重写父类中的方法。
  • @Deprecated:表示某个程序元素(类、方法等)已经过时。
  • @SuppressWarnings:关闭编译器警告。
  • @SafeVarargs:抑制泛型警告。

3. Spring框架注解

  • @Controller:表示该类是一个Web控制器。
  • @RestController@Controller@ResponseBody的组合注解。
  • @RequestMapping:用于映射Web请求到控制器的处理方法上。
  • @GetMapping@PostMapping@PutMapping@DeleteMapping@PatchMapping:分别处理GET、POST、PUT、DELETE、PATCH请求。
  • @ResponseBody:表示该方法的返回值作为响应体。
  • @RequestBody:表示方法参数应该从请求体中读取。
  • @RequestParam:用于将Web请求参数绑定到控制器处理方法的参数上。
  • @PathVariable:用于将URL中的变量绑定到控制器处理方法的参数上。
  • @ResponseStatus:用于设置HTTP响应状态码。
  • @ExceptionHandler:用于定义异常处理方法。
  • @Component@Service@Repository:用于声明Spring组件。
  • @Autowired:自动注入依赖。

4. Hibernate Validator注解

  • @NotNull@NotEmpty@NotBlank:验证字段不为空。
  • @Size:验证对象的大小。
  • @Min@Max:验证数值的最小值和最大值。
  • @DecimalMin@DecimalMax:验证数值的最小值和最大值(包括边界)。
  • @Digits:验证数字的整数和小数部分的位数。
  • @Email:验证电子邮件地址的格式。
  • @Pattern:验证字符串是否匹配正则表达式。

5. JUnit测试注解

  • @Test:标记测试方法。
  • @Before@After:在每个测试方法之前和之后执行。
  • @BeforeClass@AfterClass:在所有测试方法之前和之后执行。
  • @Ignore:忽略测试方法。
  • @RunWith:指定测试运行器。

6. Lombok插件注解

  • @Data:自动生成getter、setter、toString、equals、hashCode等方法。
  • @NoArgsConstructor@AllArgsConstructor:生成无参构造函数和全参构造函数。
  • @Slf4j:生成日志对象。
  • @Accessors(chain = true):支持链式调用。

7. MybatisPlus注解

  • @Mapper:声明Mybatis的Mapper接口。
  • @TableName:指定实体对应的数据库表名。
  • @TableField:指定实体类属性对应的数据库字段。

8. Swagger注解

  • @ApiOperation:描述接口的作用。
  • @ApiImplicitParam:描述接口参数。

9. AOP切面注解

  • @Aspect:声明一个类为切面。
  • @Before@After@Around:定义前置通知、后置通知和环绕通知。
  • @Pointcut:定义切点。

10. 其他注解

  • @Transactional:声明事务管理。
  • @Async:声明异步方法。
  • @Scheduled:声明定时任务。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区