package com.sinosun.transfer.rmi;
import java.rmi.Remote;
/**
* 订单接口
*/
public interface IOrder extends Remote {
// 付款方法
String pay(String id) throws RuntimeException;
}
package com.sinosun.transfer.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
/**
* 实现类
*/
public class OrderImpl extends UnicastRemoteObject implements IOrder {
protected OrderImpl() throws RemoteException {
super();
}
public String pay(String id) throws RuntimeException {
return "支付成功,商品订单号ID:"+id;
}
}
package com.sinosun.transfer.rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class RmiClient {
public static void main(String[] args) throws RemoteException, NotBoundException, MalformedURLException {
// 通过rmi发现服务并且转化成为一个对象
IOrder iOrder = (IOrder) Naming.lookup("rmi://localhost:6666/order");
// 远程调用一下
System.out.println(iOrder.pay("18888"));
}
}
package com.sinosun.transfer.rmi;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
/**
* RMI-服务端
*/
public class RmiServer {
public static void main(String[] args) throws Exception {
// 接口实例化
IOrder iOrder = new OrderImpl();
// 本地服务注册到6666端口
LocateRegistry.createRegistry(6666);
// 把刚才的实例绑定到本地端口的一个路径上
Naming.bind("rmi://localhost:6666/order",iOrder);
System.out.println("服务器已经启动!");
}
}
重点PPT
package com.sinosun.transfer.proxy;
public interface Girl {
// 约会
void date();
// 看电影
void watchMovice();
}
package com.sinosun.transfer.proxy;
public class xiaohong implements Girl{
public void date() {
System.out.println("小红:和你约会很开心");
this.watchMovice();
}
public void watchMovice() {
System.out.println("小红:电影很好看");
}
}
package com.sinosun.transfer.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class xiaohongProxy implements InvocationHandler {
private Girl girl;
public xiaohongProxy(Girl girl) {
super();
this.girl = girl;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 事前
doSomeThingBefor();
Object object = method.invoke(girl,args);
// 事后
doSomeThingEnd();
return null;
}
private void doSomeThingBefor(){
System.out.println("小红的父母说,我得调查下这个男孩的背景");
}
private void doSomeThingEnd(){
System.out.println("小红的父母说,他没有对你动手动脚吧");
}
public Object getProxyInstance(){
// 类加载器,接口,自身的Handler
return Proxy.newProxyInstance(girl.getClass().getClassLoader(),girl.getClass().getInterfaces(),this);
}
}
package com.sinosun.transfer.proxy;
public class demo {
public static void main(String[] args) {
// 隔壁有个妹子,小红
Girl girl = new xiaohong();
// 他有庞大的家庭,想要跟他约会必须经过家人同意(代理)
xiaohongProxy proxy = new xiaohongProxy(girl);
// 去他们家碰见他妈妈(代理对象),他妈妈(代理对象)同意我们约会
Girl mehod = (Girl) proxy.getProxyInstance();
// 成功约会
mehod.date();
}
}