学习自
- https://www.cnblogs.com/daniels/p/8242592.html
- <<java编程思想>>
静态代理
public interface Shopping {
public void buy();
}
public class ShoppingImpl implements Shopping{
@Override
public void buy() {
System.out.println("开始购物");
}
}
public class StaticShoppingProxy implements Shopping{
Shopping shopping;
public StaticShoppingProxy(final Shopping shopping){
this.shopping=shopping;
}
@Override
public void buy() {
System.out.println("出门");
shopping.buy();
System.out.println("回家");
}
}
public class Test2 {
public static void main(String[] args) {
Shopping shopping = new ShoppingImpl();
shopping.buy();
StaticShoppingProxy staticShoppingProxy= new StaticShoppingProxy(shopping);
staticShoppingProxy.buy();
}
}
开始购物
出门
开始购物
回家
动态代理
public interface Shopping {
public void buy();
public String show(String things);
}
public class ShoppingImpl implements Shopping{
@Override
public void buy() {
System.out.println("开始购物");
}
@Override
public String show(String things) {
return things;
}
}
public class DynamicProxyHandler implements InvocationHandler {
Object object;
DynamicProxyHandler(Object object){
this.object= object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("***proxy:"+proxy.getClass()+",method:"+method+",args:"+args);
if (args!=null){
for(Object arg:args){
System.out.println(" "+arg);
}
}
System.out.println("出门");
return method.invoke(object,args);
}
}
public class Test2 {
public static void main(String[] args) {
Shopping shopping = new ShoppingImpl();
shopping.buy();
Shopping shoppingproxy = (Shopping) Proxy.newProxyInstance(Shopping.class.getClassLoader(), new Class[] {Shopping.class},new DynamicProxyHandler(shopping));
if(shoppingproxy==null){
System.out.println("空");
}else {
shoppingproxy.buy();
shoppingproxy.show("wanda");
}
}
}
输出结果:
开始购物
***proxy:class com.sun.proxy.$ Proxy0,method:public abstract void test1_2020717.Shopping.buy(),args:null
出门
开始购物
***proxy:class com.sun.proxy.$Proxy0,method:public abstract java.lang.String test1_2020717.Shopping.show(java.lang.String),args:[Ljava.lang.Object;@2503dbd3
wanda
出门