自定义注解以及反射得到当前的调用方法
2016-01-11 01:21
525 查看
自定义注解以及反射得到当前的调用方法
下面的这个方法很好的,得到现在被调用的方法
StackTraceElement[] stacks = new Exception().getStackTrace();
String methodName = stacks[1].getMethodName();
System.out.println("methodName: "+ methodName);
Main.java
BaseLog.java
OpLogger.java
PersonObj.java
Person.java
BaseJsonRst.java
Page.java
下载地址:
http://git.oschina.net/paincupid/springmvc
下面的这个方法很好的,得到现在被调用的方法
StackTraceElement[] stacks = new Exception().getStackTrace();
String methodName = stacks[1].getMethodName();
System.out.println("methodName: "+ methodName);
Main.java
package com.paincupid.springmvc.application.annotation.currClass; import com.paincupid.springmvc.test.domain.Person; public class Main { public static void main(String[] args) { PersonObj po = new PersonObj(); po.add(new Person()); } }
BaseLog.java
package com.paincupid.springmvc.application.annotation.currClass; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class BaseLog { public void logger(){ Class clazz = this.getClass(); String annId = ""; try { Object obj = clazz.getConstructor(new Class[]{}).newInstance(new Object[]{}); Method[] methods = clazz.getDeclaredMethods(); StackTraceElement[] stacks = new Exception().getStackTrace(); String methodName = stacks[1].getMethodName(); System.out.println("methodName: "+ methodName); for (Method method : methods) { if(method.isAnnotationPresent(OpLogger.class) && method.getName().equals(methodName)){ OpLogger logger = method.getAnnotation(OpLogger.class); annId = logger.id(); String clazzName = clazz.getName(); System.out.println("clazzName: "+clazzName + ", methodName: "+methodName +", annId: "+annId); } } } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
OpLogger.java
package com.paincupid.springmvc.application.annotation.currClass; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME)//注解会在class中存在,运行时可通过反射获取 @Target(ElementType.METHOD)//目标是方法 @Documented//文档生成时,该注解将被包含在javadoc中,可去掉 public @interface OpLogger { public String id() default "-1"; }
PersonObj.java
package com.paincupid.springmvc.application.annotation.currClass; import java.util.List; import com.paincupid.springmvc.test.domain.Person; import com.paincupid.springmvc.util.BaseJsonRst; public class PersonObj extends BaseLog{ public BaseJsonRst<List<Person>> search(String id) { BaseJsonRst<List<Person>> ret = new BaseJsonRst<List<Person>>(); return ret; } @OpLogger(id = "123add") public BaseJsonRst<List<Person>> add(Person person){ BaseJsonRst<List<Person>> ret = new BaseJsonRst<List<Person>>(); logger(); return ret; } @OpLogger(id = "456delete") public BaseJsonRst<List<Person>> delete(Person person){ BaseJsonRst<List<Person>> ret = new BaseJsonRst<List<Person>>(); return ret; } @OpLogger(id = "update789") public BaseJsonRst<List<Person>> updatge(Person person){ BaseJsonRst<List<Person>> ret = new BaseJsonRst<List<Person>>(); return ret; } }
Person.java
package com.paincupid.springmvc.test.domain; import com.paincupid.springmvc.util.Page; public class Person extends Page{ private String id; private String name; private int age; private String tel; private String prov; private String city; private String town; private String sex; private String location; private String company; private String comment; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getProv() { return prov; } public void setProv(String prov) { this.prov = prov; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getTown() { return town; } public void setTown(String town) { this.town = town; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public String getCompany() { return company; } public void setCompany(String company) { this.company = company; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getComment() { return comment; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public void setComment(String comment) { this.comment = comment; } }
BaseJsonRst.java
package com.paincupid.springmvc.util; import java.io.Serializable; import java.util.Map; public class BaseJsonRst<T> extends Page implements Serializable{ private static final long serialVersionUID = 1L; private boolean success; //成功或失败的标志 private T result; //结果集 private String message; //成功或失败的信息 public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public T getResult() { return result; } public void setResult(T result) { this.result = result; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public static <T> BaseJsonRst<T> create() { return new BaseJsonRst<T>(); } public BaseJsonRst<T> success(T t){ this.setResult(t); this.setSuccess(true); return this; } public BaseJsonRst<T> fail(String msg){ this.setMessage(msg); this.setSuccess(false); this.setTotalCounts(1); return this; } public static <T> BaseJsonRst<T> newSucc(T t){ BaseJsonRst<T> rst = new BaseJsonRst<T>(); rst.setResult(t); rst.setSuccess(true); return rst; } public static <T> BaseJsonRst<T> newFail(String msg){ BaseJsonRst<T> rst = new BaseJsonRst<T>(); return rst.fail(msg); } public BaseJsonRst<T> debug(String di){ return this; } }
Page.java
package com.paincupid.springmvc.util; public class Page { private static final long serialVersionUID = 1L; public int totalCounts=0; //设置分页的总条目数 public int pageSize = 20; //设置每一页的条目数, 默认20条数据 public int currentPage = 1; //设置当前的页码 public int getTotalCounts() { return totalCounts; } public void setTotalCounts(int totalCounts) { this.totalCounts = totalCounts; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } }
下载地址:
http://git.oschina.net/paincupid/springmvc
相关文章推荐
- 软件工程总结(添加自己提出的问题)
- 多线程原子操作的简单示例
- find查找后 xargs 复制文件
- const 和 #define区别
- AndroidSupport兼容包无法关联源码的解决办法
- [看书日记20160111]没心情啊。。Messenger,AIDL
- [leetcode] 138. Copy List with Random Pointer 解题报告
- openstack 入门1
- easyui扩展-日期范围选择.
- Objective-c的内存管理MRC与ARC
- C++读取name values形式Config 配置文件
- sdoi最优图像image(网络流)
- 个人阅读作业
- linux中shell数组的使用和建立
- 我想做个公众号——当今社会的自我营销
- 个人阅读作业Week17
- iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象
- mysql使用gtid主从复制
- Python Scrapy安装
- keepalive实现mysql主从自动切换