这两天想搭一个纯粹使用注解的ssm框架,于是就看了看mybatis注解的使用方式,但是感觉java中底层注解平时不常使用都忘得差不多了,于是就重新看了一遍.
这里简单记录下1.Java中开发自定义注解类,2.自定义注解类的使用,3.自定义注解类的解析
一.自定义注解类开发
package com.star.frame.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Name {
String id () default "1";
String value() default "";
int len() default 100;
String[] properties() default {"p1","p2"};
Class<? extends Object> type() default String.class;
}
理解:1.注解类与接口相似,里面只能定义静态常量和抽象方法;它与接口,枚举,类属于同一层次,都被称作一种类型。
2.java底层中提供的注解有两种:(1)常用的基本注解:@SuppressWarnings,@Deprecated,@Override(2)元注解:@Retention,@Target
3.注解类的使用范围由@Retention决定,分三种:
RetentionPolicy.SOURCE:指定注解只保留在源文件当中,编译成类文件后就把注解去掉。
RetentionPolicy.CLASS:指定注解只保留在源文件和编译后 class 文件中,当jvm加载类时就把注解去掉。
RetentionPolicy.RUNTIME:指定注解可以保留在jvm中,这样就可以使用反射获取信息了。
默认保留在类中文件中,所以使用时一般要指定保存到RetentionPolicy.RUNTIME中
4.可以使用注解的元素类型由@Target决定,分为以下几种:
ElementType.TYPE:说明该注解只能被声明在一个类前。
ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
ElementType.PACKAGE:说明该注解只能声明在一个包名前
不写则默认可以使用于所有元素类型。
二.自定义注解类的使用
package com.star.frame.annotation;
public class Use {
@Name(id="name1",len=50,properties={"a","b"},value="test")
public boolean getName(String id,int len ,String[] properties,String value){
System.out.println(id);
System.out.println(len);
System.out.println(properties[0]+properties[1]);
System.out.println(value);
return true;
}
}
理解:注解的使用方法:
1.@注解名:一般使用于有默认值的注解
2.@注解名(方法名=方法返回值) :使用于没有默认值的注解,此时必须制定值
3.@注解名(方法名=方法返回值,方法名={返回值1,返回值2}) :使用于方法返回数组类型的注解
4.@注解名(返回值) :使用于只有value方法的注解,可以只写返回值
三.自定义注解类的解析
public class Parse {
public void parseMethod(Class clzz) throws Exception{
Object o = clzz.getConstructor(new Class[]{}).newInstance(new Object[]{});
Method[] methods = clzz.getDeclaredMethods();
for (Method method : methods) {
Name nameClzz = method.getAnnotation(Name.class);
if(nameClzz != null){
String id = nameClzz.id();
String value = nameClzz.value();
int len = nameClzz.len();
String[] props = nameClzz.properties();
Class< ? extends Object> clz = nameClzz.type();
method.invoke(o,id,len,props,value);
}
}
}
}
理解:当解析注解的时候,一般通过getAnnotation 或 getAnnotations 来获取类,方法,属性的注解类。从而使用反射进行处理
以上就是对于java注解使用方法的简单总结,此中有些理解的用法是参考一些博客总结出来的,作为自己的积累使用。