接着我们来写一个动态代理的实例
public interface HyBusiness {
//进口业务
public void in();
//出口业务
public void out();
}
同样写一个顶层接口
public class HjlBussinessImpl implements HyBusiness {
/**
* HJL进口业务
*/
@Override
public void in() {
System.out.println("HJL进口业务");
}
/**
* HJL出口业务
*/
@Override
public void out() {
System.out.println("HJL出口业务");
}
}
被代理类实现顶层接口
public class DynamicProxy {
/**
* 动态代理方法
*
* @param object 被代理的船公司
* @return
* @throws Exception
*/
public static Object dynamicProxyMethod(Class<?> object) throws Exception {
Object entity = object.newInstance();
//船代
InvocationHandler handler = new SuniscoProxy(entity);
//被代理的船公司对应类加载器
ClassLoader cl = entity.getClass().getClassLoader();
//代理
HyBusiness proxy = (HyBusiness) Proxy.newProxyInstance(cl, entity.getClass().getInterfaces(), handler);
return proxy;
}
}
public class SuniscoProxy implements InvocationHandler {
Object object = null;
/**
* 通过构造注入被代理船公司
*
* @param _obj 被代理船公司
*/
public SuniscoProxy(Object _obj) {
object = _obj;
}
/**
* 代理调用实际业务逻辑方法(船公司实现接口类方法)
*
* @param proxy
* @param method 方法
* @param args 方法形参值
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = method.invoke(this.object, args);
return result;
}
}
动态代理
public class Customer {
public static void main(String[] args) throws Exception {
//客户到船代办理HJL业务
HyBusiness proxy = (HyBusiness) DynamicProxy.dynamicProxyMethod(HjlBussinessImpl.class);
//客户到船代办理WHL业务
// HyBusiness proxy = (HyBusiness) DynamicProxy.dynamicProxyMethod(WhlBusinessImpl.class);
//办理进口业务
proxy.in();
//办理出口业务
proxy.out();
}
}