package ssh.lxl.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import ssh.lxl.util.MyUtil;
/**
* 动态代理工厂
* @author Administrator
*
*/
public class JDKProxyFactory implements InvocationHandler
{
private Object targetObject; //代理目标对象
Logger log=LogManager.getLogger(JDKProxyFactory.class);
/**
* 新建参数所对应的类的代理类
*/
public Object createProxyInstance(Object obj)
{
this.targetObject=obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
this);
}
public Object invoke(Object proxy,Method method,Object[]args) throws Throwable
{
Object result=null;
try {
//前置通知:一般权限控制比较多
log.info(MyUtil.getCurrentDate() + " ,Method:" + method.getName()
+ "被调用");
long startTime = System.currentTimeMillis();
result = method.invoke(targetObject, args);
//后置通知:
log.info(MyUtil.getCurrentDate() + " ,Method:" + method.getName()
+ "开始执行");
try {
Thread.sleep(20);
//环绕通知
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//异常通知
}finally{
//最终通知
}
log.info(MyUtil.getCurrentDate() + " ,Method:" + method.getName()
+ "执行结束 ,耗时" + (System.currentTimeMillis() - startTime)
+ "ms");
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}