⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 binder.java

📁 云网论坛CWBBS 源码,内容丰富,学习,参考,教学的好资料,具体见内说明,
💻 JAVA
字号:
package com.cloudwebsoft.framework.aop;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.lang.reflect.Method;
import java.util.Vector;
import java.util.Iterator;
import com.cloudwebsoft.framework.aop.base.Advisor;
import cn.js.fan.util.ErrMsgException;
import java.lang.reflect.InvocationTargetException;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class Binder implements InvocationHandler {
    Vector advisors;
    public Object proxyObj;

    public Binder() {
    }

    public Object bind(Object obj) {
        this.proxyObj = obj;
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
                                      obj.getClass().getInterfaces(), this);
    }

    public void setAdvisors(Vector advisors) {
        this.advisors = advisors;
    }

    public void Before(Object proxy, Method method, Object[] args) throws
            Throwable {
        if (advisors==null)
            return;
        Iterator ir = advisors.iterator();
        while (ir.hasNext()) {
            Advisor advisor = (Advisor)ir.next();
            advisor.Before(proxy, method, args);
        }
    }

    public void After(Object proxy, Method method, Object[] args) throws
            Throwable {
        if (advisors == null)
            return;
        Iterator ir = advisors.iterator();
        while (ir.hasNext()) {
            Advisor advisor = (Advisor) ir.next();
            advisor.After(proxy, method, args);
        }
    }

    public void Throw(Object proxy, Method method, Object[] args, Exception e) throws
            Throwable {
        if (advisors == null)
            return;
        Iterator ir = advisors.iterator();
        while (ir.hasNext()) {
            Advisor advisor = (Advisor) ir.next();
            advisor.Throw(proxy, method, args, e);
        }
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws
            Throwable {
        Before(proxy, method, args);
        Object result = null;
        try {
            // 请在这里插入代码,在方法前调用
            // System.out.println("调用log日志方法" + method.getName());
            // 如果method.invoke中出现了异常,如ErrMsgException,则并不抛出,注意invoke只抛出几种异常,e.getMessage()得到的将是null
            result = method.invoke(proxyObj, args); // 原方法
            // 请在这里插入代码,方法后调用
        }
        catch (InvocationTargetException e) {
            // System.out.println("Binder.java invoke:" + e.getMessage() + " cause:" + e.getCause());
            e.printStackTrace();
            throw e.getTargetException();
            // Throw(proxy, method, args, e.getTargetException());
        }
        After(proxy, method, args);
        return result;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -