瞎扯
记得刚学java的时候,看过注解,但完全不明白是啥玩意.弄不明白
后来写android.经常看到,
直到有次用aop切面,才真正明白是个啥东西.
注解的意义
在java里面.如果给一个class添加属性,功能
一般我们要么去实现某个接口,要么添加一个成员变量.
这样就能达到目的.
但是有时我可能不想这样.我想更自由一点..
怎么办呢.
注解!
注解的作用其实就是给类,方法,变量,添加额外的附加属性.
然后我再通过拿到这个附加属性,进行额外的操作.
举个例子:
我想给一个类,添加一个额外的附加属性.
当然我也可以实现某个接口,然后复写方法来实现,或者写一个抽象方法.但我觉得这样太麻烦.用注解来实现
定义一个注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Type {
/**
* 直接绑定itemclass
*
* @return
*/
Class iClass() default Object.class;
}
用在类上
@Type (iClass = A.class)
public class Test{
}
public class A{
}
获取注解
public Class getTypeClass(Object itemData) {
Class iClass = null;
//判断是否使用了注解
Type annotation = itemData.getClass().getAnnotation(Type .class);
if (annotation != null) {
iClass= annotation.iClass();
}
}
return iClass;
}
public void test(){
Test test= new Test ();//创建对象
Class iClass = getTypeClass(test);//获取class
}
这样我们就能拿到注解中声明的Class
了.
拿到Class
能干吗?
能干的事多了.java的springMVC.几乎全是注解.原理大致如此.
比如通过class创建对象,
最简单的class.newInstance();
常用的注解
细心你就会发现,注解上还有注解.是干嘛的呢,
@Retention
-
RetentionPolicy.SOURCE
注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。 -
RetentionPolicy.CLASS
注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。 -
RetentionPolicy.RUNTIME
注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
上面这段,别的地方抄来的.
我们实际使用时,多数只用到最后一个.也就是运行时还能获取
@Target
- ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
- ElementType.CONSTRUCTOR 可以给构造方法进行注解
- ElementType.FIELD 可以给属性进行注解
- ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
- ElementType.METHOD 可以给方法进行注解
- ElementType.PACKAGE 可以给一个包进行注解
- ElementType.PARAMETER 可以给一个方法内的参数进行注解
- ElementType.TYPE 可以给一个类进行注解,比如:类、接口、枚举
上面这段还是别的地方搬来的.
常用的就 :FIELD 方法 , TYPE 类 , METHOD 成员变量
注解的属性
记住几点就行,
Class iClass() default Object.class;
int value() default -1;
1.基础类型
2.class.
3.数组.
4.注解
default
关键字可以不写,不过最好还是写上.作用就是设一个默认值
总结:
注解对于解耦来说,非常好.动态代理基本也是依赖注解来实现的.
通俗的讲,注解就是给一个东西打标记
有了标记.就能很方便的做处理.
也不算什么很高深的东西
您的喜欢与回复是我最大的动力-_-
交流群:493180098
网友评论