package com.ibm.um.adapter2.control.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*
* @author xiahui@ibm.com
* @version 1.0, 3 Mar 2013
* @since JDK1.5
*/
public class JDKProxy implements InvocationHandler {
private Log logger = LogFactory.getLog(JDKProxy.class);
private Object obj;
public Object createProxyInstance(Object obj) {
this.obj = obj;
return Proxy.newProxyInstance(this.obj.getClass().getClassLoader(),//
this.obj.getClass().getInterfaces(),//
this);
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
logger.info("[AOP]Begin invoke:" + method.getReturnType() + " " +
this.obj.getClass().getCanonicalName() + "." + method.getName());
StringBuffer buffer = new StringBuffer();
buffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
buffer.append("<Trace className=\"" + this.obj.getClass().getName() + "\"
methodName=\"" + method.getName() + "\" time=\"" + new Date() + "\">");
Object result = null;
try {
buffer.append(ParameterRef.printInputParameters(this.obj, method,
args));
result = method.invoke(this.obj, args);
buffer.append(ParameterRef.printOutputParameters(method.getReturnType().getSim
pleName(), result, method.getReturnType().getSimpleName()));
} catch (Exception e) {
logger.error("JDKProxy:ERROR", e);
buffer.append(ParameterRef.printOutputParameters("Error", e));
throw e;
} finally {
buffer.append("</Trace>");
logger.info(buffer.toString());
logger.info("[AOP]End");
}
return result;
}
}
评论0
最新资源