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();
}
}
不逼一下自己,都不知道自己有多优秀!!!

浙公网安备 33010602011771号