什么是注解呢?
很多人在理解注解的时候会容易和注释混淆,那么两者到底有什么区别呢?对于注释来说,这一段语句不会参与实际的程序运算的,只能对程序进行解释说明。而注解呢?也是对某一些语句进行额外的补充,结合反射的使用呢,很有可能会对原有程序造成一定影响的。
注解的写法是什么样的呢?
一般来说注解是 @interface 类型的,可以理解为一种特殊的接口类型,这种类型也是不能有具体的实现方法的
public @interface overRide(){
String name;
}
元注解是什么?
元注解是对注解的注解共有三种
1、@Retention
用于标识这个注解在什么时期内生效,有三种,RetenionPolicy.CLASS :代表编译器注解也就是仅仅在编译器生效,RetenionPolicy.RUNTIME:代表运行期生效,RetenionPolicy.SOURCE ,这种仅仅存在于源代码时期,编译期就不存在了。
2、@Target
用于定义注解的使用范围,如:METHOD:代表该注解只能在方法上使用,TYPE:代表该注解只能在类或者接口上使用,
CONSTRUCTOR:代表该注解只能在构造方法上使用,FIELD:代表该注解只能在属性上使用,LOCAL_VARIABLE:代表该注解只能在局部变量上使用,PARAMETER :代表该注解只能在参数上使用
3、@Documented
这个仅仅是用于生成文档说明的。
4、@Inherited
表明该注解有父子关系,也就是会被继承。如果父类使用了该注解,子类也会自动使用。
5、@Result
用于表明该注解可以在同一个地方无限次的使用。也就是对于该注解的使用次数不做限制。
为啥需要注解呢?
对于一些程序来说,会有一些特殊的信息需要进行关联处理,但是呢,又不是所有的地方都会关联,因此设计出了注解,对某些地方进行一些特殊的解释或者处理。也就是用于描述或者是配置。
注解的原理?
注解是基于java反射,对某些代码进行了动态代理的结果。可以动态的生成代理类,调用AnnotationInvocationHandler 的invoke 方法,来实现具体的逻辑。
注解的使用
注解一般都会在方法的过滤器,或者拦截器中进行处理,为这些方法提供一些必要的参数从而进行逻辑处理。
不对程序起作用,仅仅是做一些代码检查之类的处理,这种也是可以的。