//學了不少框架後,一直使用註解,一直明白其中的原理,只知道是用了反射的原理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(); } }
}