您的位置:首页 > 其它

自定义注解以及反射得到当前的调用方法

2016-01-11 01:21 525 查看
自定义注解以及反射得到当前的调用方法

下面的这个方法很好的,得到现在被调用的方法

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: