java 动态代理

package cn.dai;
//贷款接口
public interface Loans {
    public void loads();
}
package cn.dai;

public class Bank implements Loans {

    @Override
    public void loads() {
        // TODO 自动生成的方法存根
        System.out.println("我要放贷款");
    }

}
package cn.dai;

public class Agen implements Loans {
    private Bank bank;
    
    public Agen() {
        super();
        // TODO 自动生成的构造函数存根
    }
    
    public Agen(Bank bank) {
        super();
        this.bank = bank;
    }

    public Bank getBank() {
        return bank;
    }

    public void setBank(Bank bank) {
        this.bank = bank;
    }

    @Override
    public void loads() {
        // TODO 自动生成的方法存根
        this.bank.loads();
        this.serviceCharge();
    }
    public void serviceCharge() {
        System.out.println("我要收取3%的手续费。。");
    }
}
package cn.dai;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyInvocationHandler implements InvocationHandler{
    //被代理的接口
    private Loans loans;
    
    public void setLoans(Loans loans) {
        this.loans = loans;
    }
    //生成代理
    public Object getProxy() {
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                this.loans.getClass().getInterfaces(),
                this);
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // TODO 自动生成的方法存根
        Object result=method.invoke(this.loans, args);
        this.serviceCharge();
        return result;
    }
    public void serviceCharge() {
        System.out.println("我要收取3%的手续费。。");
    }
    
}
package cn.dai;


public class Clinet {
    public static void main(String[] args) {
        Bank bank=new Bank();
        Agen ag=new Agen(bank);
        ag.loads();
        System.out.println("----------");
        test();
    }
    public static void test() {
        //银行
        Bank bank=new Bank();
        //生成代理角色
        ProxyInvocationHandler pih=new ProxyInvocationHandler();
        pih.setLoans(bank);
        Loans proxy=(Loans)pih.getProxy();
        proxy.loads();

        
    }
}

 

posted @ 2020-10-12 11:11  leo0362  阅读(113)  评论(0)    收藏  举报