JDK动态代理

来源:互联网 发布:centos 下安装broadcom 编辑:程序博客网 时间:2024/05/17 22:32
package com.bjpowernode.pattern;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * 这是一个描述代理类的类,而不是代理类,因为动态代理类是动态生成的 * @author Kevin * */public class LogHanlder implements InvocationHandler {/** * 目标类的对象 */private Object targetObject;/** * 创建代理类对象 * @param targetObject 目标类的对象 * @return 代理类对象 */public Object newProxyInstance(Object targetObject) {this.targetObject = targetObject;return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),targetObject.getClass().getInterfaces(),this);}/** * 调用代理类的方法时就会调用该方法 (invoke) * @param proxy 代理类对象 * @param method 代理类方法 * @param args 代理类方法参数 */@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {// 输出代理类方法System.out.println("Start->>" + method.getName());// 输出代理类方法的参数for (int i = 0; i < args.length; i++) {System.out.println(args[i]);}// 调用目标方法的返回值Object returnValue = null;try {// 执行代理类的方法时去调用目标类的方法returnValue = method.invoke(targetObject, args);System.out.println("success->>" + method.getName());} catch (Exception e) {e.printStackTrace();System.out.println("error->>" + method.getName());}return returnValue;}}

 
原创粉丝点击