Java 注解编程学习案例.docx
《Java 注解编程学习案例.docx》由会员分享,可在线阅读,更多相关《Java 注解编程学习案例.docx(22页珍藏版)》请在冰豆网上搜索。
Java注解编程学习案例
注解原理在这里就不具体介绍了,一定要记住你会反射就OK
因为注解也是类中的一部分好,我位来看看例子吧
1.需求介绍
当用户给出一个类,就可以根据这个类的成员属性变量生成name=liuqing分割符sex=male等
当然name也是可以改变的比如性名=liuqing,可以自定义顺序
在这里我们将使用注解来实现name表示可变名字,如果name(成员属性变量)
order为排序顺序。
2.定义接口
packageponent.annotation;
importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
/**
*@date2011-4-15
*@see
*@author刘庆
*@version1.0
*
*/
@Retention(value=RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.FIELD})
public@interfaceComAnnotation{
/**
*显示字符输出名
*@returnString
*/
Stringname()default";";;
/**
*排序如果按order值排序
*@return
*/
intorder()default1;
}
3.实现接口方法
packageponent.annotation;
importjava.lang.reflect.Field;
importjava.lang.reflect.Method;
importjava.util.HashMap;
importjava.util.Map;
importjava.util.logging.Logger;
/**
*2011-4-15
*@authorliuqing
*
*/
publicclassComComponentInfoUtil{
//usejdklogger
privatestaticLoggerlog=Logger.getLogger(ComComponentInfoUtil.class.getName());
/**
*TestComComponentInfo
*@paramargs
*@throwsException
*/
publicstaticvoidmain(Stringargs[])throwsException{
ComComponentInfoUtilcom=newComComponentInfoUtil();
UserInfoTestp=newUserInfoTest();
p.setAge(23);
p.setUsb(false);
p.setSex(";male";);
p.setId(";2323";);
System.out.println(com.getObjectToStr(p,";$|$";,true));
}
/**
*spitstring
*@paramobj
*@paramspit
*@paramisOrder
*@return
*@throwsException
*/
publicStringgetObjectToStr(Objectobj,Stringspit,booleanisOrder)
throwsException{
StringBufferstrBuff=newStringBuffer();
Classclazz=obj.getClass();
HashMap<;Integer,String>;map=newHashMap<;Integer,String>;();
inti=0;
for(Methodmethod:
clazz.getMethods()){
if(this.isClassMethod(method.getName())){
ComAnnotationcomAnnotation=
this.getMethodAndFieldAnnotion(method,clazz);
if(i>;0){
strBuff.append(spit);
}
if(comAnnotation!
=null){
//displayinformation
if(comAnnotation.name()==null
||";";.equals(comAnnotation.name())){
strBuff.append(this.getFieldNameByMethodName(method
.getName())+";=";).
append(method.invoke(obj,null));
}
else{
strBuff.append(comAnnotation.name()+";=";).
append(method.invoke(obj,null));
}
//iftrueisorder
if(isOrder){
if(comAnnotation.name()==null
||";";.equals(comAnnotation.name())){
Stringstr=this.getFieldNameByMethodName(
method.getName())+";=";+
method.invoke(obj,null);
if(map.containsKey(comAnnotation.order())){
log.info(";name";+comAnnotation.name()+";:
order=";
+comAnnotation.order()+";alreadyexists";);
}
map.put(comAnnotation.order(),str);
}
else{
Stringstr=comAnnotation.name()+";=";+
method.invoke(obj,null);
if(map.containsKey(comAnnotation.order())){
log.info(";name";+comAnnotation.name()+";:
order=";
+comAnnotation.order()+";alreadyexists";);
}
map.put(comAnnotation.order(),str);
}
}
}
else{
if(comAnnotation.name()==null
||";";.equals(comAnnotation.name())){
strBuff.append(this.getFieldNameByMethodName(
method.getName())+";=";).
append(method.invoke(obj,null));
}
else{
strBuff.append(comAnnotation.name()+";=";).
append(method.invoke(obj,null));
}
//iftrueisorder
if(isOrder){
Stringstr=comAnnotation.name()+";=";+
method.invoke(obj,null);
if(map.containsKey(comAnnotation.order())){
log.info(";name";+comAnnotation.name()+";:
order=";
+comAnnotation.order()+";alreadyexists";);
}
map.put(comAnnotation.order(),str);
}
}
i++;
}
}
if(isOrder){
intj=0;
StringBufferstrBuffOrder=newStringBuffer();
for(Map.Entry<;Integer,String>;en:
map.entrySet()){
if(j>;0){
strBuffOrder.append(spit+en.getValue());
}
else{
strBuffOrder.append(en.getValue());
}
j++;
}
returnstrBuffOrder.toString();
}
else{
returnstrBuff.toString();
}
}
/**
*getAnnotationInformation
*@parammethod
*@paramclazz
*@return
*@throwsException
*/
publicComAnnotationgetMethodAndFieldAnnotion(Methodmethod,
Classclazz)throwsException{
ComAnnotationcomAnn=method.getAnnotation(ComAnnotation.class);
if(comAnn!
=null){
returncomAnn;
}
else{
StringvarFieldName=this.getFieldNameByMethodName(met