自定义注解以及反射得到当前的调用方法
自定义注解以及反射得到当前的调用方法
下面的这个方法很好的,得到现在被调用的方法
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
还没有评论,来说两句吧...