该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
都没说到点子上,别把注解想得太复杂,注解你可以理解为给某个东西加个标记,对注解本身仅仅只是起一个标记的作用,举个实际的例子
化学实验室有很多玻璃瓶装着的液体,为了区别他们,你在这些瓶子上贴了个标签,比如HCl(盐酸,好多年了,不知道是不是这么写),硫酸,石蕊试液...
注解就相当于你的标签
用代码表示
1.定义
public @interface 标签{
String name();
}
2.使用
@标签(name="盐酸")
public class A{
}
@标签(name="硫酸")
public class B{
}
...
注解的作用,就是一个标记
接下来说下反射和注解解析器
注解解析器基本上都是靠反射实现的,反射的作用是可以在类运行时动态获取类的所有属性和方法并且对其修改和使用
注解解析器获取标签name
Class c = A.class;
标签 _bq = c.getAnnotation(标签.class);//有点忘了是不是getAnnotation 方法,可以自己查下
_bq.name();//这里就拿到了标签的name了
再举个spring 解析@Autowired的例子(大概原理)
public class XXController{
@Autowired
private XXService service;
}
//解析Autowired 注入对象
Object controller;//传入的controller对象
Field[] fields = controller.getClass().getDeclaredFields();
for(Field field:fields){
Atuowired autowired = field.getAnnotation(Autowired.class);
if(autowired != null){//说明这个字段上有Autowired 注解
Object obj = applicationcontext.getBean(field.getType());//spring通过类型获取bean
field.setAccessble(true);
field.set(controller,obj);//注入对象
}
}