注解的作用
注解单独是没有意义的。
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")
}
}