标签:style class blog code java tar
java注解小结:
java中的注解一共有三个层次:
1.内置注解
2.声明注解
3.注解中的注解
一.内置注解包括:
1.@Deprecated:这个方法或类不再建议使用
2.@Override:这个方法是从父类/接口 继承过来的
3.@SafeVarargs:如果参数传递的是不可具体化的类型,会产生警告信息
4.@SuppressWarnings:告诉编译器忽略指定的警告,不用在编译完成后出现警告信息。
二.声明注解:
是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。
注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。
1.Mark注解:这类注解没有任何元素,用于告知其他开发人员-----被注解的方法,尚未被实现:如
@interface isNotImplements{}
public class AnnoatationDemo{
@isNotImplements
public void isNotImplementFunction(){
}
}
@interface Task1{
String value();
}
@interface Task2{
int value();
}
public class AnnoatationDemo{
@isNotImplements
public void isNotImplementMethod(){
}
@Task1(value = "singlevalu")
public void task1Method(){
}
@Task2(value = 0)
public void task2Method(){
}
}1. 首先是自定义注解:
package cn.veji.hibernate.po;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Privilege {
String[] value();
}
package cn.veji.hibernate.po;
package cn.veji.hibernate.po;
public class TestPrivilege {
@Privilege( { "a" })
public void a() {
}
@Privilege( { "b" })
public void b() {
}
@Privilege( { "c" })
public void c() {
}
}
package cn.veji.hibernate.po;
package cn.veji.hibernate.test;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import cn.veji.hibernate.po.Privilege;
import cn.veji.hibernate.po.TestPrivilege;
public class AnnotationUtil {
public static AnnotationUtil anno = null;
public static AnnotationUtil getInstance() {
if (anno == null) {
anno = new AnnotationUtil();
}
return anno;
}
/**
* 读取注解值
*
* @param annotationClasss 处理Annotation类名称
* @param annotationField 处理Annotation类属性名称
* @param className 处理Annotation的使用类名称
* @return
* @throws Exception
*/
@SuppressWarnings("all")
public Map<String, String> loadVlaue(Class annotationClasss,
String annotationField, String className) throws Exception {
System.out.println("处理Annotation类名称 === "+annotationClasss.getName());
System.out.println("处理Annotation类属性名称 === "+annotationField);
System.out.println("处理Annotation的调用类名称 === "+className);
Map<String, String> map = new HashMap<String, String>();
Method[] methods = Class.forName(className).getDeclaredMethods();
for (Method method : methods) {
if (method.isAnnotationPresent(annotationClasss)) {
Annotation p = method.getAnnotation(annotationClasss);
Method m = p.getClass()
.getDeclaredMethod(annotationField, null);
String[] values = (String[]) m.invoke(p, null);
for (String key : values) {
System.out.println("注解值 === " + key);
map.put(key, key);
}
}
}
System.out.println("map数量 === " + map.size());
return map;
}
public static void main(String[] args) throws Exception {
AnnotationUtil.getInstance().loadVlaue(Privilege.class, "value",
TestPrivilege.class.getName());
}
}
处理Annotation类名称 === cn.veji.hibernate.po.Privilege 处理Annotation类属性名称 === value 处理Annotation的调用类名称 === cn.veji.hibernate.po.TestPrivilege 注解值 === c 注解值 === a 注解值 === b map数量 === 3
3.为注解添加注解
1.Tartget注解:该注解用于指定代码中的哪些元素可以使用已定义类型的注解,如:
@Target(ElementType.METHOD)//表示该注解只能作用于方法
@interface Task1{
}
2.Retention注解:该注解用于设置注解的可见性(编译器可见,工具可见,运行时可见)
@Retention(RetentionPolicy.RUNTIME)//运行时可见
@interface Task2{
}
@Retention(RetentionPolicy.CLASS)//工可见
@interface Task3{
}
@Retention(RetentionPolicy.SOURCE)//编译器可见
@interface Task4{
}
标签:style class blog code java tar
原文地址:http://blog.csdn.net/u012332735/article/details/30262449