//学了不少框架后,一直使用注解,一直明白其中的原理,只知道是用了反射的原理spring
//今天看了一下,决定很简单。注解为了简化编程,给某个东西起啦个名字,当把这个名字贴到某个地方,这个地方就这个名字的相关意义。编程
//当你想知道这个地方的相关意义时,你能够经过反射得到该类,而后得到这个名字,经过名字得到这个地方的相关意义。app
//下面这篇博客讲的很详细框架
http://www.javashuo.com/article/p-sroqmnzv-ko.html测试
下面是一个小例子:若是你使用过hibernate或者springBoot中使用JPA就很容易理解下面的例子this
定义一个table类注解.net
@Documentedhibernate
@Retention(RUNTIME)code
@Target({ TYPE, FIELD })blog
public @interface table {
String value(); }
定义了一个culumn注解
@Documented
@Retention(RUNTIME)
@Target({FIELD})
public @interface culumn {
String value(); }
Person类中使用上面两个注解
@table("person")
public class Person {
@culumn("name") private String name; @culumn("age") private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; }
}
下面使用的测试:
public class client {
public static void main(String[] args) { try { String age="23"; String name="dfd"; StringBuffer buffer = new StringBuffer(); Class<Person> o=(Class<Person>) Class.forName("com.mao.Person"); System.out.println(o); table t= o.getAnnotation(table.class); buffer.append("select * from "+t.value()); System.out.println(o.getSimpleName()); Field f[]=o.getDeclaredFields(); System.out.println(o.isAnnotationPresent(table.class)); System.out.println(o.getAnnotation(table.class)); culumn a= f[0].getAnnotation(culumn.class); buffer.append(" where "+a.value()+"="+name); buffer.append(" and "); a= f[1].getAnnotation(culumn.class); buffer.append(a.value()+"="+age); System.out.println(buffer); } catch (ClassNotFoundException e) { e.printStackTrace(); } }
}