首页 > 编程语言 >Java 开发之关键注解详细汇总

Java 开发之关键注解详细汇总

时间:2024-12-25 09:41:09浏览次数:5  
标签:... Java 示例 汇总 private public import 注解 class

一、JDK自带的基本注解

  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");
        }
    }
    
  2. @Deprecated
    • 作用:用于标记某个元素(类、方法、字段等)已经过时。当其他代码使用这个被标记为过时的元素时,编译器会发出警告。
    • 示例:
    class OldClass {
        @Deprecated
        public void oldMethod() {
            System.out.println("This is an old method.");
        }
    }
    
  3. @SuppressWarnings
    • 作用:用于抑制编译器产生警告信息。可以指定要抑制的警告类型,比如unchecked(未检查的类型转换警告)、deprecation(使用已过时的元素警告)等。
    • 示例:
    @SuppressWarnings("unchecked")
    public void someMethod() {
        List list = new ArrayList();
        // 这里没有指定泛型类型,会产生未检查的警告,但是被抑制了
    }
    

二、Java EE相关注解(以Servlet为例)

  1. @WebServlet
    • 作用:用于将一个类声明为Servlet。可以在这个注解中配置Servlet的名称、URL模式等属性。
    • 示例:
    @WebServlet(name = "MyServlet", urlPatterns = {"/myServlet"})
    public class MyServlet extends HttpServlet {
        //...
    }
    
  2. @WebFilter
    • 作用:用于将一个类声明为过滤器。可以指定过滤器的名称、过滤的URL模式等信息。
    • 示例:
    @WebFilter(filterName = "MyFilter", urlPatterns = {"/*"})
    public class MyFilter implements Filter {
        //...
    }
    
  3. @WebListener
    • 作用:用于将一个类声明为监听器,如Servlet上下文监听器、会话监听器等。
    • 示例:
    @WebListener
    public class MyServletContextListener implements ServletContextListener {
        //...
    }
    

三、Spring框架相关注解(以Spring Boot为例)

  1. @SpringBootApplication
    • 作用:这是一个组合注解,包含了@Configuration@EnableAutoConfiguration@ComponentScan。它用于标记一个主应用类,启动Spring Boot应用。
    • 示例:
    @SpringBootApplication
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    
  2. @Component
    • 作用:用于将普通的Java类标记为Spring组件,这些组件会被Spring容器管理。可以通过@ComponentScan扫描并加载到容器中。
    • 示例:
    @Component
    public class MyComponent {
        //...
    }
    
  3. @Service
    • 作用:用于标记业务逻辑层的组件,本质上也是@Component,只是语义更明确,表示这是一个服务类。
    • 示例:
    @Service
    public class MyService {
        //...
    }
    
  4. @Repository
  • 作用:用于标记数据访问层(如数据库访问)的组件,同样是@Component的一种特殊形式,用于和持久层操作关联。
  • 示例:
@Repository
public class MyRepository {
    //...
}
  1. @Autowired
  • 作用:用于自动装配Spring容器中的Bean。可以用在字段、构造函数、方法等上面,让Spring自动注入依赖的Bean。
  • 示例:
@Service
public class MyService {
    @Autowired
    private MyRepository myRepository;
    //...
}
  1. @Qualifier
  • 作用:当有多个相同类型的Bean时,和@Autowired一起使用来指定要注入的具体Bean的名称或限定符。
  • 示例:
@Service
public class MyService {
    @Autowired
    @Qualifier("specificRepository")
    private MyRepository myRepository;
    //...
}
  1. @Value
  • 作用:用于注入外部配置文件中的值或者直接注入常量值到Spring管理的Bean中。
  • 示例:
@Service
public class MyService {
    @Value("${my.property.value}")
    private String propertyValue;
    //...
}

四、Hibernate相关注解(用于对象 - 关系映射,ORM)

  1. @Entity
  • 作用:用于将一个Java类标记为实体类,这个实体类可以和数据库中的表进行映射。
  • 示例:
@Entity
public class User {
    //...
}
  1. @Table
  • 作用:用于指定实体类对应的数据库表名。如果不指定,默认使用实体类的类名作为表名。
  • 示例:
@Entity
@Table(name = "users")
public class User {
    //...
}
  1. @Id
  • 作用:用于标记实体类中的主键字段。
  • 示例:
@Entity
@Table(name = "users")
public class User {
    @Id
    private Long id;
    //...
}
  1. @GeneratedValue
  • 作用:用于指定主键的生成策略,如自增长(IDENTITY)、序列(SEQUENCE)等。
  • 示例:
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    //...
}
  1. @Column
  • 作用:用于定义实体类中的字段和数据库表中的列之间的映射关系。可以指定列名、列的长度、是否可为空等属性。
  • 示例:
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "user_name", length = 50, nullable = false)
    private String userName;
    //...
}

五、JUnit相关注解(用于单元测试)

  1. @Test
  • 作用:用于标记一个方法是测试方法。JUnit会执行被这个注解标记的方法来进行单元测试。
  • 示例:
import org.junit.jupiter.api.Test;
public class MyTest {
    @Test
    public void testMethod() {
        // 测试逻辑
    }
}
  1. @BeforeEach
  • 作用:用于标记在每个测试方法执行之前需要执行的方法。通常用于初始化测试数据等操作。
  • 示例:
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class MyTest {
    private MyClass myObject;
    @BeforeEach
    public void setup() {
        myObject = new MyClass();
    }
    @Test
    public void testMethod() {
        // 使用myObject进行测试
    }
}
  1. @AfterEach
  • 作用:用于标记在每个测试方法执行之后需要执行的方法。通常用于清理测试资源等操作。
  • 示例:
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class MyTest {
    private MyClass myObject;
    @BeforeEach
    public void setup() {
        myObject = new MyClass();
    }
    @Test
    public void testMethod() {
        // 使用myObject进行测试
    }
    @AfterEach
    public void cleanup() {
        // 清理myObject相关资源
    }
}
  1. @BeforeAll
  • 作用:用于标记在所有测试方法执行之前需要执行的方法。这个方法必须是静态方法,并且只会执行一次。
  • 示例:
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public class MyTest {
    private static MyClass myObject;
    @BeforeAll
    public static void setupAll() {
        myObject = new MyClass();
    }
    @Test
    public void testMethod() {
        // 使用myObject进行测试
    }
}
  1. @AfterAll
  • 作用:用于标记在所有测试方法执行之后需要执行的方法。这个方法必须是静态方法,并且只会执行一次。
  • 示例:
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public class MyTest {
    private static MyClass myObject;
    @BeforeAll
    public static void setupAll() {
        myObject = new MyClass();
    }
    @Test
    public void testMethod() {
        // 使用myObject进行测试
    }
    @AfterAll
    public static void cleanupAll() {
        // 清理myObject相关资源
    }
}

六、Lombok相关注解(用于简化Java代码编写)

  1. @Data
  • 作用:这是一个组合注解,包含了@Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor。用于自动生成常用的方法,如getter和setter方法、toString方法等。
  • 示例:
import lombok.Data;
@Data
public class User {
    private String name;
    private int age;
}
  1. @Getter
  • 作用:用于自动生成字段的getter方法。
  • 示例:
import lombok.Getter;
public class User {
    @Getter
    private String name;
    //...
}
  1. @Setter
  • 作用:用于自动生成字段的setter方法。
  • 示例:
import lombok.Setter;
public class User {
    @Setter
    private String name;
    //...
}
  1. @ToString
  • 作用:用于自动生成toString方法,方便打印对象的信息。
  • 示例:
import lombok.ToString;
@ToString
public class User {
    private String name;
    private int age;
}
  1. @EqualsAndHashCode
  • 作用:用于自动生成equalshashCode方法,方便比较对象是否相等和计算对象的哈希码。
  • 示例:
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class User {
    private String name;
    private int age;
}
  1. @NoArgsConstructor
  • 作用:用于自动生成无参构造函数。
  • 示例:
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class User {
    private String name;
    private int age;
}
  1. @AllArgsConstructor
  • 作用:用于自动生成全参构造函数。
  • 示例:
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class User {
    private String name;
    private int age;
}

七、其他常用注解

  1. @Retention
  • 作用:用于指定注解的保留策略。可以是SOURCE(只在源代码中保留,编译器编译时会丢弃)、CLASS(在字节码文件中保留,但在运行时无法通过反射获取)或RUNTIME(在字节码文件中保留,并且在运行时可以通过反射获取)。
  • 示例:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public@interface MyAnnotation {
    //...
}
  1. @Target
  • 作用:用于指定注解可以应用的元素类型,如类、方法、字段、参数等。可以使用ElementType枚举中的值来指定,如ElementType.TYPE(类、接口、枚举)、ElementType.METHOD(方法)等。
  • 示例:
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
public@interface MyAnnotation {
    //...
}
  1. @Documented
  • 作用:用于指定当生成Javadoc文档时,这个注解也会被包含在文档中。
  • 示例:
import java.lang.annotation.Documented;
@Documented
public@interface MyAnnotation {
    //...
}
  1. @FunctionalInterface
  • 作用:用于标记一个接口是函数式接口。函数式接口是指只有一个抽象方法的接口,这种接口可以用于Lambda表达式。
  • 示例:
@FunctionalInterface
public interface MyFunction {
    int apply(int x);
}
  1. @Repeatable
  • 作用:用于指定一个注解可以在同一个元素上重复使用。需要配合一个容器注解来使用。
  • 示例:
import java.lang.annotation.Repeatable;
@Repeatable(MyAnnotations.class)
public@interface MyAnnotation {
    //...
}
public@interface MyAnnotations {
    MyAnnotation[] value();
}
  1. @MappedSuperclass
  • 作用(在JPA中):用于标记一个类是其他实体类的父类,这个父类的属性会被继承到子实体类中,但是这个父类本身不会被映射为一个独立的数据库表。
  • 示例:
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public class BaseEntity {
    // 公共的实体属性,如id、createDate等
}
  1. @Inherited
  • 作用:用于指定一个注解可以被继承。如果一个类被标记了这个可继承的注解,那么它的子类也会自动继承这个注解。
  • 示例:
import java.lang.annotation.Inherited;
@Inherited
public@interface MyAnnotation {
    //...
}
  1. @Native
  • 作用:用于标记一个方法是本地方法,这个方法是用其他语言(如C或C++)实现的。
  • 示例:
public class MyClass {
    @Native
    public static native void myNativeMethod();
}
  1. @SafeVarargs
  • 作用:用于标记一个方法,这个方法带有可变参数并且在方法内部对可变参数的使用是类型安全的。
  • 示例:
public class MyClass {
    @SafeVarargs
    public static <T> void myMethod(T... args) {
        // 安全地使用可变参数
    }
}
  1. @SuppressWarnings("rawtypes")
  • 作用:用于抑制关于使用原始类型(未指定泛型类型)的警告。
  • 示例:
@SuppressWarnings("rawtypes")
public void myMethod() {
    List list = new ArrayList();
}
  1. @Transient(在JPA中)
  • 作用:用于标记一个实体类中的字段,这个字段不会被持久化到数据库中。
  • 示例:
import javax.persistence.Entity;
import javax.persistence.Table

标签:...,Java,示例,汇总,private,public,import,注解,class
From: https://www.cnblogs.com/java-note/p/18629416

相关文章

  • Java基础知识全面解析
    Java基础知识全面解析Java是一种广泛使用的、面向对象的编程语言,它被广泛应用于开发桌面应用、Web应用、企业级应用、移动应用以及嵌入式系统等。Java语言自诞生以来,一直以其跨平台、性能优异、开发高效等特点,深受开发者青睐。本文将从Java的基础知识入手,详细介绍Jav......
  • 【Java基础面试题035】什么是Java泛型的上下界限定符?
    回答重点Java泛型的上下界限定符用于对泛型类型参数进行范围限制,主要有上界限定符和下届限定符。1)上界限定符(?extendsT):定义:通配符?的类型必须是T或者T的子类,保证集合元素一定是T或者T的子类作用:通常用于读取操作,通配符?类型必须是T/T的子类,然后集合元素也必须是T/T的子......
  • 常用的查找算法(Java实现)
    常用的查找算法(Java实现)查找算法是计算机科学中的基础算法之一,它们帮助我们在数据中寻找特定元素。查找操作在实际开发中非常常见,例如在数据库查询、网络数据检索、图像处理等领域都离不开高效的查找算法。常见的查找算法包括线性查找、二分查找、哈希查找等。本文将详细介......
  • 【Java基础面试题041】Java中的深拷贝和浅拷贝有什么区别?
    回答重点深拷贝:深拷贝不仅复制对象本身,还递归复制对象中所有引用的对象。这样新对象与原对象完全独立,修改新对象不会影响到原对象。即包括基本类型和引用类型,堆内的引用对象也会复制一份浅拷贝:浅拷贝只复制对象的引用,而不复制引用指向的实际对象,也就是说,浅拷贝创建一个新对象......
  • 【Java基础面试题043】BigDecimal为什么能保证精度不丢失?
    回答重点BigDecimal使用十进制来表示数值,而不是二进制浮点数表示法,这使得它能够精确地表示所有十进制数值,不需要任何转换或舍入。而且BigDecimal是无限精度,可以表示任意精度的小数(受限于内存),因此不会动不动被舍入截断,也可以手动设置精度和舍入模式来控制计算的精度BigDecima......
  • 【Java基础面试题046】Java中的注解原理是什么?
    注解其实就是一个标记,是一种提供元数据的机制,用于给代码添加说明信息。可以标记在类上、方法上、属性上等,标记自身也可以设置一些值。注解本身不影响程序的逻辑执行,但可以通过工具或框架来利用这些信息进行特定的处理,如代码生成、编译时检查、运行时处理等。扩展知识自定义......
  • 面向对象程序设计JAVA学习总结
    第一章“初识JAVA与面向对象程序设计”廖利凯1、JAVA概述1.1计算机编程语言发展史机器语言:由微处理器理解和使用的二进制代码,是第一代编程语言,如0001111111101111等,直接控制硬件操作,但难记且不通用。汇编语言:用英文单词指令编写程序,是第二代编程语言,如MOVAX,1等,相比机......
  • JAVA期末通讯录
    写了挺久的,来CSDN记录一下应用软件:mysql,idea--------------------------------------------------------第一步:连接数据库直接去哔哩哔哩上面找mysql下载,下载完了之后我自身没有配什么环境,直接找的mysql怎么跟idea连接视频先用idea把mysql连接了之后再去看的mysql......
  • Java多态--上转型对象
    Java多态概念实现方式上转型对象概念多态:面向对象的三大特性之一多态一句话概括就是,一个类下面的不同子类的实例,对同一个参数输入,得到不同的输出举例:动物类下的小猫、小狗,两只动物分别拍一下,小猫输出“喵喵喵”,小狗输出“汪汪汪”。实现方式多态的方式:类的继承,方......
  • Java 变量和运算符
    Java变量和运算符1.变量(Variable)1.1何为变量1.2数据类型(DataTypes)1.2.1整型:byte、short、int、long1.2.2浮点类型:float、double1.2.3字符类型:char1.2.4布尔类型:boolean1.3变量的使用1.3.1步骤1:变量的声明1.3.2步骤2:变量的赋值1.4.基本数据类型变......