注解基础

49 阅读1分钟

注解的作用

注解单独是没有意义的。
1.一般都是注解+APT(注解处理器)用于生成一些java文件 比如butterknife dagger2 hilt databinding
2.注解+代码埋点 比如AspactJ arouter
3.注解+反射+动态代理 XUtils lifecycle

1.注解分为:元注解、内置注解、自定义注解

元注解:在JDK1.5中提供了用来对注解类型进行注解的注解我们称之为meta-annotation(元注解)

2.声明的注解允许作用于哪些节点使用@Target声明

@Target(ElementType.TYPE) //接口、类、枚举上声明

@Target(ElementType.METHOD) //方法上声明

@Target(ElementType.FIELD)  //字段、枚举的常量

@Target(ElementType.PARAMETER) //方法参数

@Target(ElementType.CONSTRUCTOR)  //构造函数

@Target(ElementType.LOCAL_VARIABLE)//局部变量

@Target(ElementType.ANNOTATION_TYPE)//注解

@Target(ElementType.PACKAGE) ///包   

@Retention 注解作用域

RetentionPolicy.SOURCE 标记的注解仅保留在源级别中,并被编译器忽略

RetentionPolicy.CLASS 标记的注解在编译时由编译器保留,但Java虚拟机(JVM)会忽略

RetentionPolicy.RUNTIME 标记的注解由JVM保留,因此运行时环境可以使用它

SOUREC < CLASS

3.注解的几个生命周期?(注解作用域)

SOURCE 
CLASS
RUNTIME

4.代码示例

 @Target({ElementType.FIELD})
 @Retention(RetentionPolicy.CLASS)
 public @interface BindView{
     String value();
     int id();
 }

调用

public class MainActivity extends AppCompatActivity {
    @BindView(value= "123",id=1)
    TextView textView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView.Text("123456")
    }
}