java注解
自JDK1.5之后引入注解之后,各个框架中都提供了支持注解的方式。在日常开发中慢慢的将XML许多的配置转换成注解,经常的使用 甚至陶sir在定义日终类的时候,自定义了注解:@Trigger 和 @TargetMethod 以作使用。可见注解的易用性和广泛性。
这边对注解做一些了解
元注解:在jdk中提供了 为自定义注解 所需要的几个元注解:
@inte易做图ce : 用于定义注解
@Target :用于描述注解的使用范围 大致有 method(方法) field(属性) type (类)
@Retention : 注解的生命周期 SOURCE :源文件有效,CLASS :class文件有效, RUNTIME : 运行时有效
@Documented : javadoc记录标记
然后对应注解 自定义 method field type 三类注解:
/**
* 自定义注解,目标范围是字段
*
* @author yanbin
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @inte易做图ce AnnotationField {
public String fieldValue() default "default Field value";
}
/**
* 自定义注解,目标范围是方法
*
* @author yanbin
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @inte易做图ce AnnotationMethod {
public String methodValue() default "default Method value";
}
/**
* 自定义注解,目标是类
*
* @author yanbin
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @inte易做图ce AnnotationType {
public String typeValue() default "default Type value";
}
在一个类上面使用自定义的注解:
/**
* 注解使用者
*
* @author yanbin
*
*/
@AnnotationType(typeValue = "user Type value")
public class AnnotationUser {
/** 字段属性 */
@AnnotationField(fieldValue = "user Field value")
private String userField;
/**
* 使用者方法
*/
@AnnotationMethod(methodValue = "user method value")
public String userMethod() {
return "user default method value";
}
/**
* 做事
*/
public void doIt() {
System.out.println(userField);
}
public String getUserField() {
return userField;
}
public void setUserField(String userField) {
this.userField = userField;
}
}
测试类,解析注解:
/**
* 注解测试类,获取注解关键在反射
*
* @author yanbin
*
*/
public class AnnotationTest {
public static void main(String[] args) {
AnnotationTest test = new AnnotationTest();
test.resolve();
test.testDoIt();
}
/**
* 解析如何获取注解对应注解中的值
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public void resolve() {
try {
// 后去对应的类 www.zzzyk.com
Class clazz = Class.forName("annotation.user.AnnotationUser");
// 判断clazz是否存在FirstAnno.class注解
if (clazz.isAnnotationPresent(AnnotationType.class)) {
// 存在,则获取这个注解
AnnotationType annoType = (AnnotationType) clazz.getAnnotation(AnnotationType.class);
System.out.println("AnnotationType value: " + annoType.typeValue());
}
// 获取该类的所有方法
Method[] methods = clazz.getDeclaredMethods();
// 解析方法注解
for (Method method : methods) {
if (method.isAnnotationPresent(AnnotationMethod.class)) {
AnnotationMethod annoMethod = method.getAnnotation(AnnotationMethod.class);
System.out.println("AnnotationMethod value: " + annoMethod.methodValue());
}
}
// 获取该类的所有属性字段
Field[] fields = clazz.getDeclaredFields();
// 解析字段注解
for (Field field : fields) {
if (field.isAnnotationPresent(AnnotationField.class)) {
AnnotationField annoField = field.getAnnotation(AnnotationField.class);
System.out.println("AnnotationField value: " + annoField.fieldValue());
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 解释注解中的值,并且赋值给相关属性或者方法
*/
public void testDoIt
补充:软件开发 , Java ,