注解
土豆 2023/6/17 java
# 内置注解
@Override
表示这个方法重写了父类的方法
public class Hero {
String name;
@Override
public String toString() {
return name;
}
}
@Deprecated
弃用
public class Hero {
@Deprecated
public void hackMap(){
}
}
# 自定义注解
定义注解
@Target({METHOD,TYPE})
表示这个注解可以用用在类/接口上,还可以用在方法上
@Documented
表示当执行javadoc的时候,本注解会生成相关文档
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
@Target({METHOD,TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface JDBCConfig {
String ip();
int port() default 3306;
String database();
String encoding();
String loginName();
String password();
}
使用注解
@JDBCConfig(ip = "127.0.0.1",database = "test",encoding = "utf-8",loginName = "root",password = "admin")
public class DBUtil {
public static void main(String[] args) {
JDBCConfig config = DBUtil.class.getAnnotation(JDBCConfig.class);
String ip = config.ip();
int port = config.port();
String database = config.database();
String encoding = config.encoding();
String password = config.password();
System.out.println(ip);
System.out.println(port);
System.out.println(database);
System.out.println(encoding);
System.out.println(password);
}
}
# 元注解
# @Target
@Target
表示这个注解能放在什么位置上
ElementType.TYPE
:能修饰类、接口或枚举类型
ElementType.FIELD
:能修饰成员变量
ElementType.METHOD
:能修饰方法
ElementType.PARAMETER
:能修饰参数
ElementType.CONSTRUCTOR
:能修饰构造器
ElementType.LOCAL_VARIABLE
:能修饰局部变量
ElementType.ANNOTATION_TYPE
:能修饰注解
ElementType.PACKAGE
:能修饰包
import java.lang.annotation.*;
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface JDBCConfig {
String ip();
int port() default 3306;
String database();
String encoding();
String loginName();
String password();
}
# @Retention
@Retention
表示生命周期
RetentionPolicy.SOURCE
:注解只在源代码中存在,编译成class之后,就没了。@Override
就是这种注解。
RetentionPolicy.CLASS
: 注解在java文件编程成.class文件后,依然存在,但是运行起来后就没了。
RetentionPolicy.RUNTIME
:注解在运行起来之后依然存在,程序可以通过反射获取这些信息
import java.lang.annotation.*;
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface JDBCConfig {
String ip();
int port() default 3306;
String database();
String encoding();
String loginName();
String password();
}
# @Inherited
@Inherited
表示该注解具有继承性。可以获取到父类DBUtil
上的注解信息。
public class DBUtilChild extends DBUtil{
public static void main(String[] args) {
JDBCConfig config = DBUtilChild.class.getAnnotation(JDBCConfig.class);
String ip = config.ip();
System.out.println(ip);
}
}