JAVA动态代理打印日志DEMO

/**
 * 加、减、乘、除
 * @author john
 *
 */
public interface CalculateLog {

public int add(int i, int j);

public int sub(int i, int j);

public int mul(int i, int j);

public int div(int i, int j);
}

/**
 * 实现类
 * @author john
 *
 */

public class CalculateLogImpl implements CalculateLog {


@Override
public int add(int i, int j) {
return i + j;


@Override
public int sub(int i, int j) {
return i-j;
}

@Override
public int mul(int i, int j) {
return i*j;

}


@Override
public int div(int i, int j) {
return i/j;
}
}
/**
 * 动态代理,打印日志
 * @author john
 *
 */
public class CalculateLogProxy {

// 创建一个要代理的对象
private CalculateLog target;

public CalculateLogProxy(CalculateLog target) {
super();
this.target = target;
}

public CalculateLog getLogProxy(){
CalculateLog proxy = null;

// 代理对象由哪一个类加载器负责加载
ClassLoader loader = target.getClass().getClassLoader();

// 代理对象的类型,即其中有哪些方法
Class[] interfaces = new Class[]{CalculateLog.class};

// 当调用代理对象其中的方法时,该执行的代码
InvocationHandler h = new InvocationHandler() {
/**
* 参数说明:
* proxy:正在返回的那个代理对象。一般情况下,在invoke方法中都不使用该对象.
* method:正在被调用的方法
* args:调用方法时传入的参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
String methodName = method.getName();
// 日志信息
System.out.println(methodName + " 方法 begin 执行," + Arrays.asList(args));
// 执行方法
Object result = method.invoke(target, args);
System.out.println(methodName + " 方法 end 执行," + Arrays.asList(args));
return result;
}
};
proxy = (CalculateLog)Proxy.newProxyInstance(loader, interfaces, h);
return proxy;
}

}
@Test
public void test1(){
CalculateLog target = new CalculateLogImpl();

CalculateLogProxy calculateLogProxy = new CalculateLogProxy(target); 
CalculateLog logProxy = calculateLogProxy.getLogProxy();
int add = logProxy.add(4, 1);
System.out.println(add);

logProxy.sub(4, 1);
System.out.println(add);

logProxy.mul(4, 1);
System.out.println(add);

logProxy.div(4, 1);
System.out.println(add);
}

最好选择Spring  AOP方式进行打印日志
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值